1

次のコードを使用してメールを送信します。

        public static bool SendEmail(string To, string ToName, string From, string FromName, string Subject, string Body, bool IsBodyHTML)
        {
            try
            {
                MailAddress FromAddr = new MailAddress(From, FromName, System.Text.Encoding.UTF8);
                MailAddress ToAddr = new MailAddress(To, ToName, System.Text.Encoding.UTF8);
                var smtp = new SmtpClient
                {
                    Host = "smtp.datagts.net",
                    Port = 587,
                    EnableSsl = false,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = true,                                        
                    Credentials = new System.Net.NetworkCredential("MeEmail@...", "Password")
                };

                using (MailMessage message = new MailMessage(FromAddr, ToAddr)
                {
                    Subject = Subject,
                    Body = Body,                    
                    IsBodyHtml = IsBodyHTML,                    
                    BodyEncoding = System.Text.Encoding.UTF8,                   

                })
                {
                    smtp.Send(message);
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

ローカルで動作し、ローカル IIS で Web サイトを使用すると動作しますが、Web サイトにアップロードすると動作せず、エラーが発生しても電子メールが送信されません。

これについて私を助けてくれる人はいますか?

UPDATE1 : try catch を削除し、次のメッセージでエラーをキャッチします。Failure sending mail

更新 2: stmpサーバーを変更し、Gmail アカウントを使用します。次のコードを見てください。

public static bool SendEmail(string To, string ToName, string From, string FromName, string Subject, string Body, bool IsBodyHTML)
            {
                try
                {
                    MailAddress FromAddr = new MailAddress(From, FromName, System.Text.Encoding.UTF8);
                    MailAddress ToAddr = new MailAddress(To, ToName, System.Text.Encoding.UTF8);
                    var smtp = new SmtpClient
                    {
                        Host = "smtp.gmail.com",
                        Port = 587,
                        EnableSsl = true,
                        DeliveryMethod = SmtpDeliveryMethod.Network,
                        UseDefaultCredentials = false,                                        
                        Credentials = new System.Net.NetworkCredential("MeEmail@gmail.com", "Password")
                    };

                    using (MailMessage message = new MailMessage(FromAddr, ToAddr)
                    {
                        Subject = Subject,
                        Body = Body,                    
                        IsBodyHtml = IsBodyHTML,                    
                        BodyEncoding = System.Text.Encoding.UTF8,                   

                    })
                    {
                        smtp.Send(message);
                    }
                    return true;
                }
                catch
                {
                    return false;
                }
            }

そして今、私はまだエラーが発生します:(

このリンクに記載されている「MustIssueStartTlsFirst」エラーが発生します。@EdFS ポイントを確認して、ポート 25 を使用しようとしています。

UPDATE3:共有サーバーを使用しているためです。ポートを 25 に変更するだけで、スチールが機能せず、同じエラーが発生します。サーバーバックアップチームからサポートを受けようとしています

4

1 に答える 1

5

SMTP サーバー (smtp.datagts.net) が正常に動作していると仮定すると、次の点を確認する必要があります。

  1. あなたのコードは を使用しているようですUseDefaultCredentials=trueが、次の行で資格情報を提供しています
  2. コメントで述べたように、Web ホストでポート 587 がブロックされていないことを確認してください
  3. 共有サーバー (専用マシンではない) でホストされている場合、ASP.Net が に設定されている可能性medium trustがあります。その場合ポート 25以外のポートをSMTPに使用することはできません

アップデート:

エラーに到達しようとします。ローカル(開発) マシンで、これを web.config に追加します。

<system.web>
...
    <securityPolicy>
      <trustLevel name="Medium" />
    </securityPolicy>
...

ローカル マシン上の ASP.Net は で実行されFULL TRUSTます。上記の設定により、現在作業中の Web サイト/アプリケーションが で実行されmedium trustます。必要に応じて削除/コメントできます。この演習のポイントは、Web ホストの設定を一致させることです (ローカル マシンで機能し、公開時に機能しない場合は明らかに異なります)。Webホストから情報を取得するだけでもいいでしょう..しかしそれまでは....

次に、ポート 587 と 25 の両方を試します。

  • セキュリティ例外でポート 587 で失敗するはずです (理由によりmedium trust) 。
  • メール サーバーがポート 587 での SMTP 接続のみを受け入れる場合、もちろんポート 25 も機能しません (ただし、別のエラーが発生するはずです)。この場合の「...それでも動作しない...」という点は、SMTP サーバー (smtp.datagts.net)がポート 587 での接続のみを受け入れることです。

GMAIL も同じ話です。ASP.Net の Web ホスト設定が の場合、ポート 587 は使用できませんmedium trust。私はこれを何度も経験しました-ローカルマシンでは「機能」しますが、ローカル開発マシンで有効にするとすぐにmedium trust失敗します。

Web ホストに ASP.Net の設定を尋ねる必要があります。「カスタム」設定の場合は、コピーを要求して開発ボックスでも使用できます。

于 2012-05-12T14:12:31.703 に答える