2011-02-28 3 views
4

から改行を追加し、私はちょうど盲目のかもしれません(非常に可能!)しかし、私は:(.NETまたはMSSMTPはヘッダ

すべてで私を助けどこにでもここに/ Googleの上の任意の情報を見つけることができません

まずアップ、下記の私は、電子メールメッセージの送信に使用しているコードです:UTF8(ただし結果のメールに私はこれを取得...

MailMessage newMM = new MailMessage(); 

newMM.To.Add(new MailAddress(userEmail)); 
newMM.From = new MailAddress(getFrom, getFromName); 
newMM.IsBodyHtml = true; 
newMM.Subject = userSubject; 
newMM.Body = userHTML; 
if (chkEncoding.Checked) 
{ 
    newMM.BodyEncoding = System.Text.Encoding.UTF8; 
    newMM.SubjectEncoding = System.Text.Encoding.UTF8; 
} 

NetworkCredential basicAuthenticationInfo = new NetworkCredential(mUsername, mPassword); 
SmtpClient smtp = new SmtpClient(mServer); 
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtp.UseDefaultCredentials = false; 
smtp.Credentials = basicAuthenticationInfo; 
smtp.Send(newMM); 

細かい送り、などを有効にするとUTF8の罰金を行いますかない):

... 
MIME-Version: 1.0 
From: "The name i want" 
<[email protected]> 
To: [email protected] 
... 

これはMSSMTP Queueフォルダのファイルをチェックしているため、電子メールを受信したときに.NETで改行やMSSMTPを追加しているようです。

誰でもこれを前にしていますか?またはアイデアを持っている? :) Decludeがアドレスから一致していないことを言って、私は、ヘッダー経由で見ることができますスパム重量を追加しているので、これは解決することが重要である

理由は次のとおりです。

X-RBL-Warning: FROMNOMATCH: Env sender ([email protected]) From: ("The name i want") mismatch. 
... 
X-Declude-Tests: ... FROMNOMATCH [2] ... 

だから私は、他のスパムを想像フィルタには、それについての囁きもあります。

編集:

参考:すべての電子メールはすべての電子メールクライアントで完璧に見えますが、これは純粋にヘッダレンダリング/スパムプロセッサの問題です。

誰かが少し余裕があれば、.NETを使用してメッセージを送信し、未処理のヘッダー(未編集で電子メールクライアントによって解析されていない)を確認してお知らせできますか?私は今のトラック輸送にしておこう:)

EDIT2:私はソケット、基本的な回答(220年代、250年代、354のetc)を使用して.NETでの基本的なSMTPサーバーを作成し、コードを使用している

がに接続するためにそれを送信して...問題が発生するので、これは間違いなくMS-SMTPではなく、.NET側のコードです。

また、新しい.NET 4.0 Windowsアプリケーションを作成し、ボタンを追加してこのコードを挿入しました(注:System.Net.Mailを使用して追加しました。アプリケーション):

private void button1_Click(object sender, EventArgs e) 
{ 
    MailMessage newMM = new MailMessage(); 
    newMM.To.Add(new MailAddress("[email protected]")); 
    newMM.From = new MailAddress("[email protected]", "Happy As'Larry"); 
    newMM.IsBodyHtml = true; 
    newMM.Subject = "My Subject"; 
    newMM.Body = "My HTML"; 
    SmtpClient smtp = new SmtpClient("localhost"); 
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
    smtp.Send(newMM); 
} 

それは上記のようにテストSMTP出力アプリケーションへのローカルとしてその正確ので、検証の必要はありません...これはどのような方法で編集されていませんのでご注意ください。

私のSMTPアプリケーションはSystem.Net.SocketsのTcpListenerとSocketオブジェクトを使用し、すべてのリモートデータを単純なテキストボックスに出力するだけで、実際に応答してDATAコマンドに到達できるようにコマンドバッファの文字列を解析します.NETがしかし、送信しているかどうか確認するには:)

出力はここにある:

EHLO WhiteDragon-PC 
MAIL FROM:<[email protected]> 
RCPT TO:<[email protected]> 
DATA 
MIME-Version: 1.0 
From: "Happy As'Larry" 
<[email protected]> 
To: [email protected] 
Date: 28 Feb 2011 19:00:19 +1100 
Subject: My Subject 
Content-Type: text/html; charset=us-ascii 
Content-Transfer-Encoding: quoted-printable 

My HTML 

. 

ので、それぞれに非常に基本的なコードと2つの完全に新しいアプリケーション、と私はまだ問題を得ます!

これは.NET 4.0のバグですか?もし誰かがこのコードをチェックしたいのであれば、それも貼り付けます。

+0

私はSmtpClientを使用しています。私の生のメッセージには、「From」の名前と「From」の電子メールアドレスの間に改行がありません。私はあなたの問題について今考えるつもりです。 –

+0

Fromヘッダーはあまり長くありませんか? SMTPは、990文字のようなものの後に改行を自動的に追加します。 –

+0

入れ替えたテキストは実際のデータよりも長くなります:) –

答えて

3

私の編集の最後の部分が結果を示しています。

スイッチは、テストクライアント.NET 3.5へのアプリケーションとは、ヘッダから次のようになります。 "ハッピーAs'Larry" .NETへ<[email protected]>

スイッチテストクライアントアプリケーション:から

4.0ヘッダからなる:

から "ハッピーAs'Larry"
  <[email protected]>

これは.NET 4.0ライブラリの問題で/これが解決しました...プロファイルを.NET 3.5に変更しました!

:)

EDIT手伝っすべての人に感謝します:タグの位置合わせやエンコーディングは...あわや

EDIT2:また、これはDecludeのスパムチェックヘッダ、NOFROMMATCHを固定している[2]重みがあります私の電子メールは「スパム」になりません

私の提案は、.NET 4.0を使用して電子メールを送信する場合です。これをチェックしてください!

+0

これをms connectに報告してください。私は、この問題に関する既存の報告書を確認しなかった。 –

0

私のプロジェクトの一つに類似したソースコードにソースコードを比較すると、私が思い付く唯一の可能性がある:

あなたgetFrom変数は、改行が含まれています。

+0

newMM.From = new MailAddress( "[email protected]"、 "私が欲しい名前");同じ問題が発生するので、それは確かにそうではありません –

0

以前のバージョンのMailMessageには他にも数多くのバグがあります。 http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/879f13d7-24e6-4a0f-b396-627e9da25fc1/

誰かがMailMessageに依存しないより良いクラスを提案できたら、本当に感謝しています。

そして、あなたの楽しみのために、ここにメールアドレスを台無しに.NET 4.0でのエンコード方法は次のとおりです。

// Encodes the full email address, folding as needed 
internal string Encode(int charsConsumed) 
{ 
    string encodedAddress = String.Empty; 
    IEncodableStream encoder; 
    byte[] buffer; 

    Debug.Assert(this.Address != null, "address was null"); 

    //do we need to take into account the Display name? If so, encode it 
    if (!String.IsNullOrEmpty(this.displayName)) 
    { 
     //figure out the encoding type. If it's all ASCII and contains no CRLF then 
     //it does not need to be encoded for parity with other email clients. We will 
     //however fold at the end of the display name so that the email address itself can 
     //be appended. 
     if (MimeBasePart.IsAscii(this.displayName, false)) 
     { 
      encodedAddress = String.Format("\"{0}\"", this.displayName); 
     } 
     else 
     { 
      //encode the displayname since it's non-ascii 
      encoder = encoderFactory.GetEncoderForHeader(this.displayNameEncoding, false, charsConsumed); 
      buffer = displayNameEncoding.GetBytes(this.displayName); 
      encoder.EncodeBytes(buffer, 0, buffer.Length); 
      encodedAddress = encoder.GetEncodedString(); 
     } 

     //the extra space is because there should be a non-printable whitespace char 
     //following the fold (CRLF) and there is supposed to be a space between the display name and 
     //the address so this is necessary. 
     encodedAddress += "\r\n "; 
    } 

    //now we have the encoded display name (if present), we need to append the address to it. 
    if (!String.IsNullOrEmpty(encodedAddress)) 
    { 
     //address should be enclosed in <> when a display name is present 
     encodedAddress += SmtpAddress; 
    } 
    else 
    { 
     //no display name, just return the address 
     encodedAddress = this.Address; 
    } 

    return encodedAddress; 

} 
関連する問題