4

私は現在、添付ファイル データを含む SMTP トラフィックをリッスンし、MX レコードのメール アドレスを見つけて受信者に転送する独自のメール サーバーを作成している ac# アプリケーションに取り組んでいます。

これは、私が理解できない奇妙な問題を除いて、すべて完全に機能しています。

この問題は、Mono 環境の Linux で C# プログラムを実行する場合にのみ影響します。Windows ではすべて問題ありません。

問題は、メール サーバー プログラムをポート 26 で実行している場合 (ポート 25 は既に使用されています)、Windows PC にファイルを送信するテスト C# プログラムがあることです。次に、添付ファイル データを取得して、添付ファイルを一時ファイルに正常に書き込み、添付ファイル オブジェクトを再作成して、メッセージと共に添付ファイルを送信します。電子メールを受信すると、電子メールの内容が存在しなくなり、添付ファイルが呼び出されnonameます。添付ファイルを表示すると、電子メールの見出しの一部と、添付ファイルを構成する base 64 文字列が含まれています。

ただし、プログラムをポート25で実行するように変更すると、明らかにすべてがまったく同じ方法で行われますが、今回は電子メールがGmailアカウントに到着すると、電子メールはメッセージ本文と添付ファイルと完全に一致しています正しい名前と形式。Linux で別のポートを使用してプログラムを実行すると、この問題が発生する理由がわかりません。動作中と非動作中のヘッダーを確認しましたが、すべて問題ないようです。

これはモノの問題ですか?MXレコードで送信するときにsmtpクライアントのポートをポート25に設定しようとしましたが、違いはありません。以下は、添付ファイルの送信方法です。

FileStream fileStream = new FileStream(attachmentTempName, FileMode.Open, FileAccess.Read);
Attachment attachment = new Attachment(fileStream, attachments[0].realFileName, MediaTypeNames.Application.Octet);
message.Attachments.Add(attachment);
message.From = new MailAddress(emailInfo["EmailFrom"]);
                    message.To.Add(emailInfo["EmailTo"]);
                    message.Subject = emailInfo["Subject"];
                    if (emailInfo["Headers"] != "")
                    {
                        message.Headers.Add(getHeaders(emailInfo["Headers"]));
                    }
                    message.Body = emailInfo["Body"];
                    message.Body = "This is a test hardcoded";
                    if (emailInfo["EmailFormat"] == ManageEmail.EmailFormat.HTML.ToString())
                    {
                        message.IsBodyHtml = true;
                    }
                    else
                    {
                        message.IsBodyHtml = false;
                    }

                    SmtpClient smtp = new SmtpClient(mxRecords[0]);
                    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                    smtp.Port = 25;
                    smtp.Send(message);

ご協力いただきありがとうございます。

4

1 に答える 1

0

@ボーディ、

私の注意を引いたのは、次の行だけでした。

Attachment attachment = new Attachment(fileStream, attachments[0].realFileName, MediaTypeNames.Application.Octet);

Attachment コンストラクターの 2 番目のパラメーターは、ファイル名ではなくContentTypeにする必要があります。

 message.Attachments.Add(new Attachment(imageFile.InputStream, imageFile.ContentType, MediaTypeNames.Image.Jpeg));

詳細については、次のリンクを参照してください: C# ファイルが添付された電子メールを送信する (画像)

乾杯。

于 2016-01-15T02:51:40.117 に答える