web-dev-qa-db-ja.com

「指定された文字列は、サブジェクトに必要な形式ではありません。」の解決

電子メール(MailMessage)を送信するクラスがありますが、次のエラーが表示されます。

「指定された文字列は、サブジェクトに必要な形式ではありません。」

文字列をサニタイズする便利なダンディな方法はありますか、それとも自分で書く必要がありますか?

61
Matt

個人的には試していませんが、 this によると、必要なのは以下だけです:

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

または同等のもの。

内部的に、MailMessageクラスは以下を使用して件名をチェックします。

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

したがって、(現時点では)唯一の制限はCRまたはLFの存在です。

101
Christian.K

また、168文字の制限があるため、それも確認する必要があります。

更新:すみません、これは完全なでたらめです:)それは私の場合は改行であったに違いありません。

12
mike nelson

.NET 2.0と4.5を試しましたが、168文字より長い件名を送信できます。 Papercut を使用してメールをチェックしました。

4
karogyoker

VB.NETの場合

subject = subject.Replace(vbNewLine, "")
3
cbillowes

私はこれがすでに答えていることを知っていますが、それは行きます:

最初に、件名をトリミングしてから、件名の最大長を考慮に入れる必要があります( メールの件名の長さ制限は何ですか? ):

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

これにより、先頭と末尾の新しい行または空のスペースが削除されます。次に、Substringを使用して件名の長さを制限します。

0
Weggo