2

SMTP サーバーを介してメールを送信するために使用される小さな tcp サーバーがあります。

問題は、開発マシン (smtp サーバーへのリモート接続) で実行すると正しく動作しますが、SMTP サーバー (Windows Server 2008 R2) と同じマシンでアプリケーションを実行すると、次の例外が発生することです。 :

System.Net.Mail.SmtpException: メールの送信に失敗しました。---> System.IO.IOException: トランスポート接続からデータを読み取れません: net_io_connectionclosed。

SMTP サーバーは、127.0.0.1 と tcp アプリケーションがバインドする IP アドレスからのリレーのみを許可するように構成されています。また、私の開発マシンも同様です。また、同じ IP リストからの接続のみを許可するように構成されています。

メールを送信するための C# ビットは次のとおりです。

var mail = new MailMessage();
mail.To.Add(recipient);
mail.From = new MailAddress("me@mydomain.com");
mail.Subject = "subject";
mail.Body = "message";
var smtpClient = new SmtpClient(MailServerAddress, Constants.MAIL_SERVER_PORT);         
smtpClient.Send(mail);

MailServerAddressアプリケーションが最初に実行されるときに定義されます。
127.0.0.1 と SMTP サーバーの構成済み IP アドレスの両方に設定しようとしましたが、それでも同じ例外が発生します。

サーバーログを確認しても、接続の兆候は見られません。これは上記の例外に当てはまります。

ここで何が間違っていますか?

4

2 に答える 2

2

暗い答えを突き刺すだけですが、約3年前に同様の問題があったため、これを試してください。修正を思い出せませんが、このコード行は、見たときに際立っています

_client.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;

だから多分試してみてください(SMTPにIISを使用していると仮定して):

var smtpClient = new SmtpClient(MailServerAddress, Constants.MAIL_SERVER_PORT); 
smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;        
smtpClient.Send(mail);
于 2013-03-03T00:41:17.350 に答える
0

ここからコピーされた回答:

Unable to read data from the transport connection: net_io_connectionclosed


What this error means is that System.net.mail was unable to find the smtp server.

The answer will vary depending on whether you have a fixed IP or a dynamic IP but,
basically, you need to assign a valid IP to your smtp server.

With fixed IP's this is relatively straightforward.
With dynamic IP's it takes a bit of tweaking.

Open the IIS Manager and check the properties for the smtp server.

In the Default SMTP Virtual Server's properties, in the "Access" tab,
in the Connection Control and Relay dialogs, make sure that your local IP is assigned.
( In my case, it's 10.0.0.2... )

You may also need to modify your hosts file, to point 127.0.0.1 to your machine name.
( \WINDOWS\system32\drivers\etc\hosts )

Then, in your code, assign your machine name to the smtp client :

SmtpClient client = New SmtpClient("yourmachinename")
client.Send(mail)

他に、ファイアウォールがテストをブロックしている可能性があります。セキュリティ上のリスクをもたらすことなく、可能であればインターネットから切断し、ファイアウォールを無効にします。それが機能するかどうかを確認します。その場合は、ファイアウォールの設定を詳しく調べる必要があります。そうでない場合は、上記で説明したように、実際にはIPアドレスである可能性があります。

于 2013-03-02T23:55:30.837 に答える