web-dev-qa-db-ja.com

MailMessageとsmtpClientを介してGmailのSMTPに認証できない

なぜこれが機能しないのか、私の人生を理解できません

SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    UseDefaultCredentials = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere"),
    EnableSsl = true,
    Timeout = 10000
};


smtp.Send(mail);

私は得ます:

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

安全な接続という点では問題にならないように、EnableSslをtrueに指定したところです。

これをlocalhostから実行しています。そして、はい、認証のために入力しているユーザー名とパスワード(私のGmailアカウントの資格情報)は100%正しいです。

19
PositiveGuy

これは古いトピックであることは知っていますが、Googleはセキュリティ設定で何かを変更しました。

「最近、Googleアカウントへのログイン試行をブロックしました」というGoogleからのメールでメールをチェックするまで、すべての回答に苦労していました。

それがこのページに私を導きました: Google Account Security

[安全性の低いアプリのアクセス]セクションで、C#アプリケーションのような他のデバイス/アプリケーションからのアカウントへのアクセスを有効にできます。

「アプリケーション固有」セクションがなくなったことに注意してください。

これが誰かを助けることを願っています...私は私の人生の30分を失ったばかりです...

38
Tiny

ログイン情報が100%正しい場合は、_UseDefaultCredentials = false_firstを設定してから、使用する認証情報を設定する必要がありますCredentials = new NetworkCredential("[email protected]", "myGmailPasswordHere")

最初に認証情報を設定した場合、_UseDefaultCredentials = false_を設定すると、Credentialsプロパティがnullになります。

これは有線ですが、私には起こりました。

コードをデバッグし、smtp.Send(message);を呼び出す前にCredentialsプロパティがnullかどうかを確認します。その場合は、順序を逆にしてみてください。正しい順序になっているようですが、nullの場合はインライン初期化を使用しないでください。

それが役に立てば幸い。

EDIT:2段階認証を使用している場合は、 App固有のパスワードを使用していることを確認してください

21
edteke

Gmailでは、アプリケーション固有のパスワード(メインのパスワードではない)が必要なようです。

これを確認してください: http://support.google.com/mail/bin/answer.py?hl=ja&answer=117327

最近同じ問題がありました。

11
Aleh Zasypkin

以前にこの問題があり、次の手順に従って修正しました。

  1. "My Account"設定に移動します。
  2. Sign-in&Security」カテゴリをクリックします。
  3. 接続されているアプリとサイト」セクションまでスクロールします。
  4. Allow安全性の低いアプリ」オプションをオフにします。

このオプションをオフにしただけで、コードは正常に実行されました。

3

これは私にとってはうまくいきました

SmtpClient smtp = new SmtpClient
    {
        Host = "smtp.gmail.com",
        Port = 587,
        UseDefaultCredentials = false,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        Credentials = new NetworkCredential("[email protected]", "mypassword"),
        EnableSsl = true,
        Timeout = 10000
    };

    MailMessage message = new MailMessage();
    message.Body = "hello there";
    message.Subject = "hi!!";
    message.To.Add("[email protected]");
    message.From = new MailAddress("[email protected]");
    smtp.Send(message);
2
krishna

私にとって、ソリューションには2つの「ステップ」が必要でした。

  • 最初に_UseDefaultCredentials = false_を設定してから、使用する認証情報を設定しますCredentials = new NetworkCredential("[email protected]", "myGmailPasswordHere")。最初に資格情報を設定すると、_UseDefaultCredentials = false_を設定すると、資格情報プロパティがnullになります。
  • 安全性の低いアプリをGoogleプロフィールで許可する。
1
Martino Messori
_<mailSettings>
            <smtp from="[email protected]">
                <network Host="smtp.gmail.com" password="yourpassword" port="587" userName="username"/>
            </smtp>
</mailSettings>
_

編集:この行を追加してみてください_smtp.Credentials = Credentials_この後に

Credentials = new NetworkCredential("[email protected]", "myGmailPasswordHere"),

0
coder

非常に簡単ですが、C#WPFアプリケーションの場合は次のようにします

       private void SendByGmail(string subject, string body, string recepientEmail, string MailMsgFrom, string MailMsgPass)
        {
            using (MailMessage mailMessage = new MailMessage())
            {
                mailMessage.From = new MailAddress(MailMsgFrom);
                mailMessage.Subject = subject;
                mailMessage.Body = body;
                mailMessage.IsBodyHtml = true;
                mailMessage.To.Add(new MailAddress(recepientEmail));
                mailMessage.Priority = System.Net.Mail.MailPriority.High;
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.EnableSsl = true;
                smtp.Timeout = 200000;
                System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
                NetworkCred.UserName = MailMsgFrom;
                NetworkCred.Password = MailMsgPass;
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = 587;
                smtp.Send(mailMessage);

            }
        }

その後、このエラーのようになるはずです

smtpException   {"The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at"}   System.Net.Mail.SmtpException

この問題を解決するには、まずWebブラウザでメールアカウントをGoogleアカウントにログインします。次に、このリンク Googleアカウントアクティビティ をたどってください。次に、アカウントによる最近のデバイスとアクティビティを取得します。表示されている場合は、現在のデバイスから現在のアクティビティをブロックします。これのブロックを解除してください。その後、もう一度メールを送信してみてください。
ありがとう

0
rktuxyn

Amazon AWSホスティングで実行されているASP.NETアプリケーションからsmtp.gmail.comにアクセスする同じ問題がありました。私の設定は正しいことがわかりました-別のコンピューターからも正常に機能していました-いつもと違う場所からログインしようとしたため、gmailは私のログイン試行を拒否しました。 Webインターフェイス(www.gmail.com)を介してGmailにログオンし、キャプチャに応答する必要がありました。その後それは働いた。

0
user2037013

次のようにコールバックします。エラーを無視するように_System.Net_に指示してください!

Send()を呼び出す前にこれを追加します

_ServicePointManager.ServerCertificateValidationCallback = 
    delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { return true; };

smtp.Send(mail);
_
0
ukhardy

私の問題は、Gmailアカウントのドメイン所有者が「安全性の低いアプリへのアクセス」と2段階認証の両方を無効にしていたことでした。それを有効にする方法がありませんでした、私は設定を見ることさえできませんでした。そのため、代わりに個人アカウントを使用してテストしましたが、問題なく動作しました。

0
Robert