解决“指定的字符串不是主题所需的格式。”


67

我有一个发送电子邮件(MailMessage)的类,但是出现以下错误:

“指定的字符串不是主题所需的格式。”

是否有方便的花花公子的方法来清理字符串,还是我必须自己编写?

Answers:


115

我没有亲自尝试过,但是根据这个,您只需要:

subject = subject.Replace('\r', ' ').Replace('\n', ' ');

或类似的东西。

在内部,MailMessage课程将通过以下方式检查主题:

if (value != null && MailBnfHelper.HasCROrLF(value)) 
{
   throw new ArgumentException(SR.GetString(SR.MailSubjectInvalidFormat));
}

因此(目前)唯一的限制是CRor的存在LF


4
这次真是万分感谢。但是必须说-微软有什么理由不能仅仅不允许换行吗?
杰拉德·奥尼尔

2
您知道文档很难;-)不允许这样做的原因很可能是CRLF在消息格式中具有非常特殊的用途(请参阅RFC5322),他们不想麻烦自动更改用户数据,而是失败并让让他手动进行操作(如上图所示)。
Christian.K,

1
进一步说明subject = subject.Replace(Environment.NewLine, " ");

9

另外,限制为168个字符,因此您也应该检查该字符。

更新:对不起,这是胡说八道:)就我而言,这一定是换行符。


2
是否有任何文档可以链接到此?
mlhDev

我不这么认为,我们只是通过反复试验弄清楚了。我可能是错的,欢迎您自己尝试并发布结果。
mike nelson

对我来说听起来不错,我只是很好奇您是如何回答的(这真是个奇怪的值)。已经+
1-

@mikenelson-我想知道为什么会有这么小的限制。想象一下,如果在SSIS(一种ETL工具)中使用了此方法,则由于此限制,您的程序包可能会失败。
Steam

我用900个以上的字符测试了它,并且效果很好
敏捷绝地


1

我知道这已经回答了,但事实是:

首先,您需要修剪主题,然后说明主题的最大长度(什么是电子邮件主题长度限制?):

subject = subject.Trim();
subject = subject.Substring(0, Math.Min(subject.Length, 78));

这将删除开头和结尾的所有新行或空白。然后使用Substring限制主题长度。


1
长度超过78个字符在这里不是问题,\ r \ n存在是问题,但也很高兴获得此答案。
Spikolynn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.