0

c# を使用して、asp.net のアプリケーションから電子メールを送信しようとしています。私は多くのことを検索し、ほとんどの場合、asp.net で c# を使用して電子メールを送信する次のコードを見つけました。

        MailMessage objEmail = new MailMessage();

        objEmail.From = new MailAddress(txtFrom.Text);
        objEmail.To.Add(txtTo.Text);
        objEmail.CC.Add(txtCC.Text);
        objEmail.Bcc.Add(txtBCC.Text);
        objEmail.Subject = txtSubject.Text;

        try
        {

            SmtpClient mail = new SmtpClient();

            mail.EnableSsl = true;
            mail.DeliveryMethod = SmtpDeliveryMethod.Network;
            mail.Credentials = new NetworkCredential(txtFrom.Text, txtPassword.Text);
            mail.Timeout = 20000;

            mail.UseDefaultCredentials = false;

            mail.Host = "smtp.gmail.com";
            mail.Port = 587;

            mail.Send(objEmail);

            Response.Write("Your Email has been sent sucessfully - Thank You");

        }
        catch (Exception exc)
        {
            Response.Write("Send failure due to : <br />" + exc.ToString());
        }

しかし、常に次のエラーが表示されます。

「System.Net.Mail.SmtpException: メールの送信に失敗しました。 ---> System.IO.IOException: トランスポート接続からデータを読み取れません: 既存の接続がリモート ホストによって強制的に閉じられました。 ---> System.Net .Sockets.SocketException: System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at System.Net.Sockets.NetworkStream.Read で、既存の接続がリモート ホストによって強制的に閉じられました。 (Byte[] buffer, Int32 offset, Int32 size) --- 内部例外スタック トレースの終わり --- System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) at System.Net .DelegatedStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.Net.BufferedReadStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.Net.Mail.SmtpReplyReaderFactory.System.Net.Mail.CheckCommand.Send(SmtpConnection conn, String& response) で System.Net.Mail.StartTlsCommand.Send( SmtpConnection conn) で System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) で System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) で System.Net.Mail.SmtpClient.GetConnection() で System.Net.Mail で。 SmtpClient.Send(MailMessage メッセージ)"System.Net.Mail.SmtpClient.Send(MailMessageメッセージ)でSystem.Net.Mail.SmtpClient.GetConnection()でSystem.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)でGetConnection(ServicePoint servicePoint)」System.Net.Mail.SmtpClient.Send(MailMessageメッセージ)でSystem.Net.Mail.SmtpClient.GetConnection()でSystem.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)でGetConnection(ServicePoint servicePoint)」

4

3 に答える 3

3

Gmail に属していないメール アドレスで Gmail の SMTP サーバーを使用しようとしています (投稿のタイトルによると)。メール プロバイダーの SMTP の詳細に合わせて、ホストとポートの詳細を更新する必要があります。

于 2012-12-24T18:45:49.027 に答える
0

あなたのコードは合理的に見えるので、何が機能を妨げているのかを突き止める必要があります。

ファイアウォールの問題の可能性を排除できますか? 中規模または大規模な組織のほとんどは、ポート 25、465、および 587 をブロックする傾向があります。これらの組織は、許可されていないメールを送信したくないだけです。これが当てはまると思われる場合は、ネットワークの外部 (つまり、自宅のマシン) から試してみることもできますが、一部の ISP もポートをブロックします。

ファイアウォールが接続をブロックしていない場合は、資格情報が機能することを確認してください。これは、Thunderbird、Outlook、または同等の方法で送信することによって行うことができます。暗号化されていないメールを使用してテストを設定してみてください。スパム フォルダをルート化し、spamcop または同等のファイルにいくつか貼り付けて、オープン リレーを探します。または、暗号化されていない電子メールをサポートするいくつかの商用電子メール プロバイダーがあります。

于 2012-12-27T04:04:29.310 に答える