1

SMTP 経由で電子メールを送信する C# ASP.Net プロジェクトがあります。
通常のパスワード回復サイクルがあり、2 つの電子メールが送信されます。最初のものにはパスワードを回復するためのアクセス コードがあり、2 番目のものは一時的なパスワードを返します。

ユーザーが紛失したパスワードを要求すると、この電子メールが常に受信されます。次に、ユーザーが電子メール内のリンクをクリックし、コードを入力すると、2 番目の電子メールが送信されます。最初のメールは常に受信されます。

2 番目の電子メールは、開発環境では常に受信されますが、展開されたバージョンでは断続的にのみ受信されます。(ウェブドライブサーバー)

2 番目の電子メールは、同じメール構成を使用します。これは、send メソッドを呼び出すメール メッセージ オブジェクトです。エラー メッセージは表示されません。スパムとして扱われている可能性があると考えましたが、何かアイデアはありますか?

メールは別のスレッドで実行されます。2 つの電子メールは非同期で送信されます。

電子メールの web.config 設定は次のとおりです。

<mailSettings>
      <smtp deliveryMethod="Network" from="info@mysite.com">
        <network host="smtp.webhost.co.nz"
                     defaultCredentials="false"
                     enableSsl="true"
                     password="password"
                     port="587"
                     userName="info@mysite.com"/>
     </smtp>
    </mailSettings>

コードは次のとおりです。

public bool SendEMailTempPass(string EmailRecipients, string Subject, string Body, bool isHTML = true)
        {
            try
            {
                var sendMailThreadPass = new Thread(() =>
                {
                    System.Net.Configuration.SmtpSection smtpSettings = new System.Net.Configuration.SmtpSection();
                    System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();//settings.Smtp.Network.Host);
                    string strFrom = ConfigurationManager.AppSettings["Mailto"];
                    MailMessage mailObj = new MailMessage(strFrom, EmailRecipients, Subject, Body);
                    mailObj.IsBodyHtml = isHTML;
                    smtp.SendCompleted += new SendCompletedEventHandler(PassChangeEmail_SendCompleted);

                    smtp.SendAsync(mailObj, null);
                });

                sendMailThreadPass.Start();

            }
            catch (Exception ex)
            {
                ErrorMessage = ex.Message;
                return false;
            }
            ErrorMessage = "";
            return true;
        }

        void PassChangeEmail_SendCompleted(object sender, AsyncCompletedEventArgs e)
        {
            if (e.Cancelled)
            { }
            else if (e.Error != null)
            {
                ErrorMessage = e.Error.ToString();
                EmailStatus = 0;
            }
            else
            {
                ErrorMessage = "";
                SuccessMessage = "Thank you.  We will be in touch!";
                EmailStatus = 1;
            }
        }

これが呼び出される方法です:

string body = PassResetEmail.PopulateBodyPassReset(this.Name + " " + this.Lastname,                                                                               LinkURL,PicURL, NewPassword, strPassResetEmailTemplate);

PassResetEmail.SendEMailTempPass(this.Email, "Change your temporary password", body, true);

Google アカウントでテストしたところ、同じ問題が発生しました。最初のメールは送信され、2 番目のメールはめったに送信されません。

どこを見るか、何を見るかについてのアイデアはありますか?

最初は、何らかのスパム フィルターではないかと考えましたが、2 つの異なるプロバイダーでも同じようです。

もう 1 つは、メール プロバイダーの設定が同じでも、ローカル環境で完全に動作することです。

どんなアイデアでも大歓迎です!

ありがとう!

4

1 に答える 1