none
smtp でメール送信時に「Recipient address rejected」エラーが出ます。 RRS feed

  • 質問


  • お世話になります。

    ASP.NET MVC5 でメールを送信するとき、「トランザクションに失敗しました。 サーバーの応答:5.7.1 <送信先のメールアドレス>: Recipient address rejected: Access denied」というエラーが出ます。

    調べると、「送信先が見つからない」時に出されるエラーのようですが、送り先は自分のアドレスの為存在しています。

    で、さらに調べると「Auth-smtp(SMTP認証)設定」が必要という説明がありました。


    カゴヤのレンタルサーバーでVPSとメールサーバを使用しています。
    設定は完了しているはずですが、アプリ側から送信しようとすると上記のエラーが出ます。
    smtp.Send(m);でメールを送信していますが、その後に出ます。

    開発環境でも出ています。VS2015 C# ASP.NET MVC5

    以下にコード:


         register.Address = "abcde@abc.com";
         register.Smtp = "smtp.kagoya.net"
         register.Password = "********";
         register.RegistMsg = "登録(*********)";
         register.Subject = "ご登録ありがとうございます。"
         register.Port = 587;
         register.Ssl = true;
         register.Account = ""アカウント名;


        {


                System.Net.Mail.MailMessage m = new System.Net.Mail.MailMessage(
                    new System.Net.Mail.MailAddress(register.Address, register.RegistMsg),
                    new System.Net.Mail.MailAddress(user.Email));

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(OnRemoteCertificateValidationCallback);

                m.Subject = register.Subject;
                m.Body = body;
                //m.Body = string.Format("{0}様<BR/>ご登録ありがとうございます。下記にリンクをクリックして登録を終了してください。 <a href=\"{1}\" title=\"User Email Confirm\">{1}</a>", user.UserName, Url.Action("ConfirmEmail", "Account", new { Token = user.Id, Email = user.Email }, Request.Url.Scheme));
                m.IsBodyHtml = true;
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(register.Smtp);     // ("smtp.sl-medical.gr.jp");

                //ユーザー名とパスワードを設定する
                smtp.Credentials = new System.Net.NetworkCredential(register.Address, register.Password);

                if (register.Ssl.ToUpper() == "TRUE")
                    smtp.EnableSsl = true;
                else
                    smtp.EnableSsl = false;
                int resilt = 0;
                if (int.TryParse(register.Port, out resilt))
                    smtp.Port = resilt;
                else
                    smtp.Port = 587;

                smtp.Send(m);
       }

            // 信頼できないSSL証明書を「問題なし」にするメソッド
            private bool OnRemoteCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
            {
                return true;  // 「SSL証明書の使用は問題なし」と示す
            }

    2019年3月13日 8:57

回答

すべての返信

  • > 開発環境でも出ています。

    開発環境で普通のメーラーを使って全く同じ設定にして送信できるのでしょうか?

    であれば、WireShark のようなプロトコルアナライザーを使って、 SmtpClient と SMTP サーバーのコマンド/レスポンスをキャプチャーして、成功する場合と失敗する場合を比較してみてはいかがですか? たぶん、そこに解決のためのヒントが見つかるのではないかと思います。

    #以下、ご参考までに事例を書くと・・・

    下の画像は Wireshark のもので、送信失敗例です。



    画像が小さくて読みづらいかもしれませんが、LOGIN 認証手続きには入るものの、 AUTH login *********** というコマンドに対して、500 authentication failed というレスポンスが帰ってきて認証失敗に終わっているのが読めるでしょうか?

    Outlook Express を使ってどうなっているか調べたところ、 AUTH LOGIN ⇒ 334 VXNlcm5hbWU6 ⇒ アカウント名 ⇒ 334 UGFzc3dvcmQ6 ⇒ パスワード ⇒ 235 Authentication successful 、とサーバーのレスポンスを待ってアカウント名とパスワードを送信する形になり認証に成功します。 当然ながら、メール送信は成功します。

    プロトコルアナライザーを使うと SmtpClient と SMTP サーバーの相性の問題というのがすぐわかって、解決策が見つかったという例です。
    2019年3月13日 9:16
  • お世話になります。

    遅くなりましたが、未だうまくいきません。

    教えていただいた、WireSharkをダウンロードしてみましたが使い方が分からずギブアップ気味です。

    色々、ググった内容から推察するにメール送信時にログインが必要とのこと・・・と判断しました

    カゴヤのヘルプにも「Auth-smtp(SMTP認証)を設定」が必要とあります。

    https://support.kagoya.jp/kir/manual/send_mail/auth-smtp.html

    設定の仕方が違っているかもしれないので、もう少し調べてみます。

    http://surferonwww.info/Hobby/Computer/PcPage7.aspx

    SurferOnWww様のサイトですね。そこもググっているとき出てきました。

    メールソフト(Outlook)から送信すると問題なくできました。タイミングや相性だとちょっと大変そうですが、

    もうちょっと頑張ってみます。

    2019年3月14日 3:55
  • SmtpClientクラスは obsoleted(廃止)扱いとなり、代わりにMailKitを使うように推奨されているそうです。いろいろ問題の多い SmtpClient を使うのは止めて、そちらに乗り換えることも検討された方が良いかもしれません。

    電子メールを送信するには?(MailKit編)
    https://www.atmarkit.co.jp/ait/articles/1811/21/news023.html

    他には、有料ですが、ASP.NET Identity の Email Confirmation のチュートリアルで紹介されている Send Mail を使うのも良いかもしれません。(NuGet でインストールできます。自分がインストールした時は SendGrid.Net40 - Version 5.1.0 という名前になっていました)

    Create a secure ASP.NET MVC 5 web app with log in, email confirmation and password reset (C#)
    https://docs.microsoft.com/ja-jp/aspnet/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset

    開発用途なら申請して無料で使用できます。

    • 回答としてマーク ferret001 2019年3月15日 6:46
    2019年3月14日 4:35
  • SurferOnWww様、お世話になります。

    ナゲットに下記でインストールしました。

    Install-Package MailKit -Version 2.1.3

    結論を言うと同じように認証段階で同様のエラーになりました。SMTP認証に何か問題があるのでしょうか

    カゴヤにSMTP認証が必要か、その必要ならその方法を確認しています。

    教えてもらえればいいが・・・サポート外かも!?

    > SmtpClientクラスは obsoleted(廃止)

     POPサーバもいつの間にかなくなったしメンテナンスか何か大変なんですかね。

    • 回答としてマーク ferret001 2019年3月15日 6:46
    • 回答としてマークされていない ferret001 2019年3月15日 6:46
    2019年3月15日 4:55
  • お世話になります。

    smtp.Credentials = new NetworkCredential(register.Account, register.Password);

    ここにセットする文字列の違いでした。大文字小文字が区別されるのか知りませんが、細かく見尚していって

    送信することができました。

    SmtpClient ・・・送信OK

    MailKit   ・・・「非同期操作が保留中の間に、非同期のモジュールとハンドラーが完了しました」

    となり新たな問題ができました。どっかで、asyncみたいなもの使っているのですかね。

    表題から外れそうなので、次回の課題にします。

    うまくいきました。ありがとうございました。

    2019年3月15日 6:45