私は現在、添付ファイル データを含む 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);
ご協力いただきありがとうございます。