web-dev-qa-db-ja.com

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

私は自分のアプリケーションからメールを送りたいのですが、メールを送るために次のコードを書きました。

    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="[email protected]" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="[email protected]" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]">
        <network Host="smtp.gmail.com" password="mypassword" port="587" userName="[email protected]"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

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

71
Abhay Andhariya

まず、Gmailのセキュリティ関連の問題を確認してください。 gmailで二重認証を有効にしている可能性があります。セキュリティの警告が表示される場合は、Gmailの受信トレイも確認してください。そのような場合は、以下のように@mjbの他の答えを確認してください。

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

client.UseDefaultCredentials = true;

falseに設定してください。

注@Joe King's answer - あなたはclient.UseDefaultCredentialsを設定しなければなりませんbeforeあなたはclient.Credentialsを設定します

39
Ronak Patel

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

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

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

最新のセキュリティ標準をサポートしていないアプリの例は次のとおりです。

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

したがって、有効にする必要があります 安全性の低いサインイン Googleアカウントに。

Googleアカウントにログインしたら、次のURLにアクセスしてください。

https://www.google.com/settings/security/lesssecureapps

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

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    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 protected]", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
以下のコメント欄でMichael Freidgeimによって共有されている情報:
スクリーンショットと同様の回答 https://stackoverflow.com/a/32457468/52277

89
mjb

必ずSmtpClient.Credentialsafterを設定してSmtpClient.UseDefaultCredentials = falseを呼び出してください。

SmtpClient.UseDefaultCredentials = falseを設定するとSmtpClient.Credentialsがnullにリセットされるので、順番は重要です。

32
Joe King

私は何時間も探してみました。まとめると、以下の点を考慮に入れなければなりませんでした。

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

これらのステップが助けにならなかったら、これをチェックしなさい 答え
おそらく、これに関して何か役に立つことがあるでしょう System.Net.Mail FAQ も。

17
Stacked

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

8
Shuchita Bora

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

MailMessage msg = new MailMessage();

msg.From = new MailAddress("[email protected]");
msg.To.Add("[email protected]");
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("[email protected]", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

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

7
meda

"UseDefaultCredentials"をfalseに設定しても同じ問題が発生しました。その後、根本的な原因が自分のアカウントで「2段階認証プロセス」をオンにしたことであることがわかりました。電源を切った後、問題は解決しました。

3
Soros Liu

enter image description here アクセスセキュリティの低いアプリが許可されていることを確認してください。

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("[email protected]");
        mail.Sender = new MailAddress("[email protected]");
        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("[email protected]", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

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

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

1
user1913909

以下は私のcode.Iです。私も同じエラーがありましたが、問題は私が間違った私のパスワードを与えたということでした。以下のコードは完璧に動作します。

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            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
Ganesh Pillai N

これより安全性の低いアプリをオンにしてください link そしてブーム...

1
Behzad Qureshi

あなたは設定ファイルでSMTP設定データを指定することを考慮し、コードでそれらを上書きしないでください - SMTPの設定データを参照してください http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="[email protected]">
                    <network defaultCredentials="false" Host="smtp.example.com" port="25" userName="[email protected]" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>
1

一部の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("[email protected]", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);
0
Yakir Manor

安全性の低いアプリアクセスを許可するようにしてください。

ここでは、Gmailでログインした後に安全性の低いアプリを有効にすることができます。

https://myaccount.google.com/lesssecureapps

ありがとう。

0
RaviTeja V

あなたがまだ同じ問題に直面しているのであれば 安全性の低いオプションをオンにして を回して他の解決策を試した後、このオーバーロードを使うようにしてください。

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

の代わりに:

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