SMTPサーバーは安全な接続を必要とするか、クライアントが認証されませんでした。サーバーの応答は次のとおりです:5.5.1認証が必要ですか?


110

アプリケーションからメールを送信したいのですが、メールを送信するための次のコードを書いています

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

私はそれをlocalhostで実行しているので、それを送信するためにどのような間違いをしていますか。

ボタンを送信すると、次のようなエラーが発生します

SMTPサーバーは安全な接続を必要とするか、クライアントが認証されませんでした。サーバーの応答は次のとおりです。5.5.1認証が必要です。

Web.configファイルのコード

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

このエラーを解決してメールを送信するにはどうすればよいですか?



私もあなたがこの答えを調べなければならないかもしれないと思う:stackoverflow.com/a/9572958/1136253
mrbengi

私も同じ問題を抱えていました。[この投稿] [1] [1]を確認してください:stackoverflow.com/a/20186909/709340
Moslem Hady

構成ファイルでSMTP構成データを指定し、コードで上書きしないことを検討する必要があります。systemnetmail.com/ faq / 4.1.aspxの
Michael Freidgeim

回答:


62

最初にGmailのセキュリティ関連の問題を確認します。Gmailで二重認証を有効にしている可能性があります。また、セキュリティアラートを受け取っている場合は、Gmailの受信トレイを確認してください。そのような場合、以下のように@mjbの他の答えを確認してください

以下は私がいつもそのような問題を最初にチェックする非常に一般的なものです

client.UseDefaultCredentials = true;

falseに設定します。

@Joe Kingの回答に注意してください-client.Credentials を設定する前に、 client.UseDefaultCredentials を設定する必要があります。


2
その場合は、コードを共有する必要があります。上記の回答は問題のコードに対するものです
ロナックパテル14

7
@Joe Kingの回答に注意してください-client.Credentialsを設定する前に client.UseDefaultCredentials を設定する必要があります
Aaron

1
この答えは機能しません。ほとんどの人がGmailのセキュリティに直面していると思います。適切な解決策については、mjbの回答を参照してください
Jerry Liang

2
また、メイクは確かに「キャプチャ」は無効になります- (ローカルマシン上で実行している場合は不要)を使用すると、リモートサーバー上でスクリプトを実行している場合、これが必要になることがあります。accounts.google.com/DisplayUnlockCaptcha
イェンス・

3
client.UseDefaultCredentials = falseを設定します。client.Credentialsの前と設定client.EnableSsl = true; 私の場合はトリックをしました。
スタック

139

私は同じ問題を抱えています。

私はこの解決策を見つけました:

Googleは、最新のセキュリティ標準を使用していない一部のアプリまたはデバイスからのログイン試行をブロックする場合があります。これらのアプリやデバイスは侵入しやすいため、ブロックするとアカウントをより安全に保つことができます。

最新のセキュリティ標準をサポートしていないアプリの例には、次のものがあります。

  • iOS 6以下を搭載したiPhoneまたはiPadのメールアプリ
  • 8.1リリースより前のWindows Phoneのメールアプリ
  • Microsoft OutlookやMozilla Thunderbirdなどの一部のデスクトップメールクライアント

したがって、安全性の低いサインイン(または安全性の低いアプリアクセス)を有効にする必要があります Googleアカウントで)ます。

Googleアカウントにサインインした後、次の場所に移動します。

https://www.google.com/settings/security/lesssecureapps
または
https://myaccount.google.com/lesssecureapps

C#では、次のコードを使用できます。

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("email@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
以下のコメント領域でMichael Freidgeimが共有する情報:
スクリーンショットを使用した同様の回答https://stackoverflow.com/a/32457468/52277


1
SSLは、コード内で有効になっていることを確実にするとともに、これは不思議、おかげでたくさん働いている
クラウチ

1
回答を共有してくれた@mjbより。それは私の人生を救います:)
Mayeed

3
これが選択された答えである必要があります
thatOneGuy

2
これは私の問題でした。トラブルを乗り越えて、より説明的な答えを出してくれてありがとう。
Bojan 2015年

私のためにも働いた。ありがとう@mjb
Rajbir Jawanda

44

SmtpClient.Credentials 呼び出しSmtpClient.UseDefaultCredentials = false後に設定してください。

設定SmtpClient.UseDefaultCredentials = falseSmtpClient.Credentialsnullにリセットされるため、順序は重要です。


2
私はこれに対する解決策を30分探していましたが、あなたが見つけた唯一のインターネット上の投稿で、この注文について言及しています。どうも。

4
@ジョーキングあなたはただの素晴らしい仲間です..... 3時間以来これを探していました:)
ジャティン

1
MSドキュメントに欠けている重要な情報である@Joe Kingに感謝します。これは、ユーザー名とパスワードで送信する私の問題の解決策でもありました。
アーロン、

1
これは簡単に見落とされがちですが、今わかったように順序は重要です。
GatesReign 2015

1
ええ。私の日を救った。Credentialsを設定する前にUseDefaultCredentials = falseを呼び出す必要があります。
Rendel

33

私は何時間もさまざまなことを検索して試しました。まとめると、次の点を考慮する必要がありました。

  1. smtp.gmail.com代わりに使用smtp.google.com
  2. ポート587を使用
  3. client.UseDefaultCredentials = false;資格情報を設定する前に設定
  4. 安全性の低いアプリのアクセスをオンにする
  5. セットする client.EnableSsl = true;

これらの手順で問題が解決しない場合は、この回答を確認してください。
おそらく、このSystem.Net.MailのFAQで何か役に立つものを見つけることができます。


1
この回答はとても役に立ちます...私の問題を解決しました。どうもありがとう
Hari

1
それでも機能しない場合は、このリンクg.co/allowaccessにアクセスしてアクセスを許可してください
Portekoi

1
「安全性の低いアプリへのアクセス」は私の一日を救った。
Romil Kumar Jain

1
この部分は私のためにそれをしました:「安全性の低いアプリのためにアクセスをオンにしてください」。ありがとう!
Tadej

11

Gmailアカウントにログインしてみてください。GmailのSMTPを使用してメールを送信すると、ロックされます。ロックされる前に送信できるメールの制限はわかりませんが、一度ログインすると、コードから再び機能します。webconfig設定が適切であることを確認してください。


確かにベストアンサー!再度ログインして、うまくいきました!PS:Googleで
キャプチャ

私のGoogleアカウントは2要素認証で保護されているため、このエラーが発生しました。メールを送信するための専用アカウントを作成してしまいました。
MvdD 2014

8

このようにしてみてください、私はいくつかの軽い変更を加えました:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

メール設定がある場合は、app.configファイルも表示してください。


まだ設定していません。そこで何を書けばいいですか?
Abhay Andhariya 2013

mvcアプリケーションにapp.configファイルがありません。
Abhay Andhariya 2013

私は他の多くの解決策を試しましたが、これだけがうまくいきました。ありがとう
Adil Malik


3

「UseDefaultCredentials」をfalseに設定しても、同じ問題が発生しました。後で、根本的な原因は自分のアカウントで「2段階認証」をオンにしたことにあることがわかりました。オフにした後、問題はなくなりました。


4
2段階認証をオフにしないでください。理由があります。GMail設定でアプリケーション固有のパスワードを生成し、それをSmtpClientで使用できます。通常のパスワードを公開するのではなく、それを行う必要があります。
ダニエルダイソン


2

ここに画像の説明を入力してください 安全性の低いアプリへのアクセスが許可されていることを確認してください。

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }

1
「アクセス安全性の低いアプリ」の設定を切り替えるためのリンクはここにある- google.com/settings/security/lesssecureapps設定を変更するには、私は、エラーを克服する助けにはならなかった
mvark

1

以下は私のコードです。私も同じエラーがありましたが、問題はパスワードを間違って入力したことでした。以下のコードは完全に動作します..それを試してください

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";

            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";

            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";

            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);

メール送信にてご参照いただけます


1

新しいGoogleアカウントの場合は、通常のユーザーインターフェイスからメール(最初のアカウント)を送信する必要があります。その後、アプリケーション/ロボットを使用してメッセージを送信できます。


1

SMTP構成データを構成ファイルで指定し、コードで上書きしないことを検討する必要があります。http: //www.systemnetmail.com/faq/4.1.aspxのSMTP構成データを参照してください。

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>



0

一部のsmtpサーバー(安全なサーバー)では、ユーザー名と電子メールの両方を提供する必要があります。そのgmailの場合、対処する必要のある「安全性の低いサインイン」の問題が発生する可能性が高いです。

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

からの電子メールとユーザー名は、それらを同じものとして参照する一部の実装とは異なります。

このメソッドの呼び出しは次のように行うことができます:

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

0

安全性の低いオプションをオンにして他の解決策を試した後も同じ問題が発生する場合は、このオーバーロードを使用してみてください。

client.Credentials = new NetworkCredential("mymailid", "mypassword");

の代わりに:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");

0

今日の朝にMicrosoft 365 Developerサブスクリプション(E5)を作成し、それを使用して次の設定でテストメールを送信しました

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

このコードによってスローされた例外でこのエラーメッセージが表示され続けるため、最初は機能しませんでした。次に、約4時間以上かけてMicrosoft 365管理センターの設定を試し、記事を読んで問題を解明しました。最終的に私はMicrosoft 365管理センターのパスワードを変更しましたが、それは魅力的なものでした。したがって、事前の解決策について考える前に、このメッセージが表示されたらパスワードを変更してみてください。

問題なくMicrosoft 365アカウントにログオンしたため、パスワードは確かに無効ではなかったことに注意してください。ただし、パスワードを変更することで問題は解決しました。


-1

「SMTPサーバーには安全な接続が必要であるか、クライアントが認証されていません。サーバーの応答は次のとおりでした:5.5.0認証が必要です 'それから多くのインターネット資料を通過しましたが、それは私を完全に助けませんでした。私がそれをどのように解決したか

step1:smtp.gmail.comはgmailサーバーですので、アカウントのgmail設定に移動してください。ステップ2-Gmailプロフィール画像をクリックします-> [Googleアカウントの管理]をクリックします-> [セキュリティ]タブに移動します->安全性の低いアプリへのアクセスを確認します(このオプションは、2段階認証を選択していない場合に使用できます)->デフォルトでグーグルはそれを無効に設定し、メールを送信するために働くあなたの本当のGmailパスワードを使用できるようにします。注:-安全性の低いアプリでGmailアクセスを有効にすることは危険なため、お勧めしません

ステップ3:アカウントで2段階認証が有効になっている場合、またはアプリ固有のパスワードを使用してGmailの実際のパスワード以外のパスワードを使用したい場合は、次のことを試してください。-Gmailのプロフィール画像をクリックしてください。タブ->アプリパスワードの検索->与えられたアプリ名を選択->デバイス名を選択->生成をクリック-> 16桁のパスワードをコピーしてアプリに貼り付け、代わりにGmailパスワードを入力する必要があります実際のGmailパスワード。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.