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


260

次のコードを使用してメールを送信しています。コードは私のローカルマシンで正しく動作します。しかし、プロダクションサーバーではエラーメッセージが表示されます

var fromAddress = new MailAddress("mymailid@gmail.com");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("yourmailid@yourdoamain.com");

string subject = "subject";
string body = "body";

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)       
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})

smtp.Send(message);

そして、Gmail A / cで、本番サーバーからコードを実行した後、次のメールを受け取りました

こんにちは 、

最近誰かがあなたのパスワードを使用して、Googleアカウントmymailid@gmail.comにログインしようとしました。この人物は、メール、クライアント、モバイルデバイスなどのアプリケーションを使用していました。

これがハイジャッカーによるアカウントへのアクセスである場合に備えて、サインインの試みを阻止しました。ログイン試行の詳細を確認してください:

2014年1月3日金曜日13:56:08 UTC IPアドレス:xxx.xx.xx.xxx(abcd.net。)場所:フィラデルフィアPA、フィラデルフィア、PA、米国

このログインの試みに心当たりがない場合は、他の誰かがあなたのアカウントにアクセスしようとしている可能性があります。アカウントにサインインして、すぐにパスワードをリセットする必要があります。

パスワードを再設定する

これがあなたであり、アカウントへのアクセスに問題がある場合は、http://support.google.com/mail?p = client_loginに記載されているトラブルシューティング手順を完了して ください。

よろしくお願いいたします。Googleアカウントチーム


本番サーバーにアクセスできますか
Arshad 2014年

本番サーバーに
アクセスできない

2段階認証プロセスをオフにします。..
マンゲシュ


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

回答:


197

これは通常、別のタイムゾーンまたはIPアドレスのコンピューターからログインしようとしたときに発生します。運用サーバーと使用したメールIDの両方が異なるタイムゾーンにあります。次の2つのソリューションのいずれかを選択します。

1)リモートアクセスを介して本番サーバーにログインし、認証情報を使用してGmailに1回ログインします。確認を求め、確認してログアウトします。

または2)ローカルコンピュータにGmailにログインし、このリンクをたどり、このアクティビティを確認して適切なアクションを実行します。


21
少しコメント:security.google.com/settings/security/activityにアクセスすると、コードからの接続がブロックされています。それらを許可すると、この場合は役立つはずです。
Alex Zhukovskiy 2014年

68
これも大いに役立ちます:google.com/settings/security/lesssecureapps
ジョージ

はい、理由はGmailアカウントで2段階認証がオンになっているためです。アプリ/デバイスを選択し、[生成]ボタンをクリックしますsupport.google.com/accounts/answer/185833
smily '12


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

301

コードからメールを送信しようとして、「SMTPサーバーは安全な接続を必要とするか、クライアントが認証されませんでした。サーバーの応答は5.5.1認証が必要です」というエラーを見つけた場合、以下の場合にエラーが発生する可能性があります。

ケース1:パスワードが間違っている場合

ケース2:一部のアプリからログインしようとした場合

ケース3:タイムゾーン/ドメイン/コンピューター以外のドメインからログインしようとし た場合(これは、コードからメールを送信するほとんどのシナリオに当てはまります)

それぞれに解決策があります

ケース1の解決策:正しいパスワードを入力します。

ケース2のソリューション1https://www.google.com/settings/security/lesssecureappsのセキュリティ設定に移動し、安全性の 低いアプリを有効にします。すべてのアプリからログインできるようにします。

ケース2のソリューション2:(https://stackoverflow.com/a/9572958/52277を参照)2要素認証(別名2段階認証)を有効にして、アプリケーション固有のパスワードを生成します。その新しく生成されたパスワードを使用して、SMTP経由で認証します。

ケース3のソリューション1:(これは役立つ場合があります)アクティビティを確認する必要があります。しかし、最新のセキュリティ標準のため、アクティビティを確認しても役に立ちません。リンクは役に立ちません。以下のケースを試してください。

ケース3のソリューション2:運用サーバーのどこかにコードをホストしていて、運用サーバーにアクセスできる場合は、運用サーバーにリモートデスクトップ接続して、運用サーバーのブラウザーから一度ログインしてみてください。これにより、Googleにログインするための例外が追加され、コードからのログインが許可されます。

しかし、本番サーバーにアクセスできない場合はどうでしょうか。 解決策を試す3

ケース3のソリューション3: Googleアカウントで他のタイムゾーン/ IPからのログインを有効にする必要があります。

これを行うには、リンクhttps://g.co/allowaccessにアクセスし、[続行]ボタンをクリックしてアクセスを許可します。

以上です。どうぞ。これで、どのコンピューターからでも、どのような方法でもアプリからGoogleアカウントにログインできるようになります。


10
解決策2!あなたは少し美しさ!
George Harnwell、2015

2
上記のlesssecureappsリンクが役立ちました:)
Gautam Jain

うわー、これは受け入れられた回答としてマークする必要があります。
Nic 2015年

5
azureでホストされているサイトは、ケース3のソリューション3に従う必要があります。g.co/ allowaccess
Ravi Anand

1
ケース3のソリューション2-私にとっては魅力のように機能しました。ありがとう。
ss_mj 2018年

106

セキュリティ上の問題であるGmailでは、デフォルトで、カスタムアプリケーションからのメールアカウントへのアクセスが禁止されています。アプリケーションからのログインを受け入れるように設定できます。

メールにログイン後、ここをクリック

次のページに移動します

安全性の低いアプリのページ


1
また、カスタムドメインがある場合は、安全性の低いアプリへのアクセスを許可するには、まずドメイン管理者がユーザーを有効にする必要があります。ドメイン管理者の場合は、次のリンクにアクセスして、このadmin.google.com/AdminHome#ServiceSettings/…
user551113

2
この答えは素晴らしいです。それは魅力のように働きます。ありがとうございました。
Thomas.Benz

24

ここですべての解決策を試すために今日数時間を費やした後、私はまだこの正確なエラーを乗り越えることができませんでした。この方法でGmailを何度も使用したので、何かばかげていることはわかっていましたが、何も修正していませんでした。私の場合、ようやく解決策を見つけたので、共有します。

まず、上記の回答のほとんども必要ですが、私の場合、SmtpClientクラスを作成するときにコードを順序付けるだけで済みました。

以下の最初のコードスニペットでは、Credentials = credsラインの位置に注意してください。この実装は、他のすべてが適切に設定されている場合でも、この質問で参照されているエラーを生成します。

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    Credentials = creds,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}

ただし、Credentialsセッター呼び出しを一番下に移動すると、メールはエラーなしで送信されます。私は周囲のコードに変更を加えませんでした...つまり、ユーザー名/パスワードなど。明らかに、どちらが最初に設定さEnableSSL, UseDefaultCredentials, or the DeliveryMethodれてCredentialsいるかにも依存します... 。

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    Credentials = creds
}

これが将来誰か他の誰かの頭痛の種を救うのに役立つことを願っています。


2
私の場合、あなたと同じ問題がありましたが、最後にクレデンシャルが来るようにコードを並べ替えました。
Dev

1
信じられないけどうまくいきました!安全性の低いフラグを有効にしたくなかったため、2ステップを有効にしましたが、送信する前に資格情報を最後に置くまでは機能しませんでした。信じられない!
–ČikićNenad 2017

6
問題は、UseDefaultCredentialsセッターに次のコードがあることです。this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;これは、セッターcredentialsによるCredentials設定をオーバーライドします。私にとってそれはSmtpClientバグのように見えます
Tomasz Madeyski

@TomaszMadeyskiこれはコメントではなく答えでなければなりません!それが私の問題です...コンストラクタに資格情報を設定してから、もう一度false値を割り当てると、UseDefaultCredentials = falseとなると、資格情報が上書きされます。しかし、それは起こります...ありがとうyouuuuu
FabianSilva


12

こんにちは、同じ問題がありました。

それを解決するために私がやったこと。安全性の低いアプリをオンにすることです。私のGmailアカウントに接続した後。私はこのリンクを入力しました:https : //www.google.com/settings/security/lesssecureapps

それから私は安全なアプリをオンにし、そしてそれはうまくいきました。それも上で言われました


では、上記の答えに対するあなたの答えとの違いは何 ですか?同じ答えが、あなたの前に2015年1月12日10:36に与えられます。
Dush

11

このエラーをスローする以前に機能していたコードがあります。パスワードの問題はありません。メッセージをbase64に変換する必要もありません。結局、私は次のことをする必要があります:

  1. 2要素認証をオフにする
  2. [安全性の低いアプリを許可する]をオンに設定します
  3. 本番サーバーからGmailアカウントにログインします
  4. 行くここでログインアクティビティを承認するだけでなく
  5. アプリを本番サーバーで実行する

作業コード

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
            EnableSsl = true
        };

        client.Send("youremail@gmail.com", emailTo, subject, body);
    }

2要素認証をオフにする 2要素認証をオフにする

「安全性の低いアプリを許可する」をオンに設定します(同じページ、一番下までスクロールする必要があります) 安全性の低いアプリを許可する


9

Googleメールの手順に従って、安全性の低いアプリを有効にしてください。


6

私も同じ問題に直面しています。2ステップ検証(MFA)をオンにすると発生します。2ステップ認証をオフにするだけで、問題は解決されます。


このアカウントで2ステップを有効にしていなかったため、この問題が発生しました。
Shiv 2015

4

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

            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);

あなたは私のブログでそれを参照することができます


ローカルマシンで動作しているのと同じコードを使用していますが、サーバーでは動作しません。エラー取得SMTPサーバーは安全な接続を必要とするか、クライアントが認証されませんでした。サーバーの応答は次のとおりです。5.5.1認証が必要です。
Akshay Chawla 2017年

1
私は彼らが言った私のホスティングプロバイダーに連絡しました: あなたは私たちの共有サーバー環境でサポートしないサードパートSMTP(smtp.gmail.com)を設定しているのを見ることができました。メール機能の乱用やスパムの問題により、メール機能はサポートされていません。PHPMailerを使用してメールを送信できます。これは非常に人気があり、よく使用されています。 しかし、私のサイトはmvc c#で構築されているので、phpmailerをどのように使用できますか?
Akshay Chawla 2017年


2

Microsoft Azureにデプロイされたアプリケーションでも同じ問題が発生しました。

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

最初に、次のページ(gmailユーザーとしてサインイン)ですべての不明なデバイス(アイルランドに由来する一部のIPアドレス)を承認しました:https : //security.google.com/settings/u/1/security/secureaccount

クライアントには次の設定を使用しました。

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password"); 

smtp-clientで次のプロパティを設定した後にのみ、機能し始めました。

client.TargetName = "STARTTLS/smtp.gmail.com";

2

私にとってうまくいったのは、安全性の低いアプリのオプションをアクティブにすることでした(私はVB.NETを使用しています)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("from@gmail.com")
        mail.[To].Add("to@gmail.com")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

アカウントにログインして、google.com / settings / security / lesssecureappsにアクセスしてください


2

Tomasz Madeyskiからのコメントが私の問題を修正したものです...彼はSetDefaultCredentialにバグが存在することを告げ、彼は言います:

「問題は、UseDefaultCredentialsセッターに次のコードがあることです:this.transport.Credentials = value?(ICredentialsByHost)CredentialCache.DefaultNetworkCredentials:(ICredentialsByHost)null;これは、Credentialsセッターによって設定された資格情報をオーバーライドします。私にとっては、SmtpClientのバグのように見えます。 "

smtpClient.UseDefaultCredentials = false資格情報の設定後に配置した場合...この行は資格情報をnullに設定します...


2

2018年11月、上記のすべてを試しても成功しませんでした。

以下は、最終的に機能したソリューションです。残念ながら、SSLは使用していませんが、動作します!!!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("tosend@asd.com", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

1

安全性の低いアプリの有効化からポート587の試用まで、ここにあるすべての提案を試しましたが、何もうまくいきませんでした。最後に、その行をコメント化しましたUseDefaultCredentials = false。そのブール値に触れなければ、すべてがうまくいきました。


1
ここも同じです。1行で1時間かかったなんて信じられません。
Wahid Masud

0

私は本当に多くのアイデアを見てきましたが、唯一の解決策はこの方法でした(さまざまな電子メールプロバイダーで動作します)。

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...

0

私はビジネス向けGoogleアプリのサブスクライバーで、正しい設定(smtp、port、enableSSLなど)をすべて行った後でも、この問題に対処するために最後の数時間を費やしています。メールの送信を試みたときに5.5.1エラーをスローしていたWebサイトと私にとっては、次のように機能しました。

  1. admin.google.comにログインします
  2. [セキュリティ]をクリックします。これが表示されない場合は、[詳細なコントロール]をクリックして、リストから追加します。
  3. 基本設定をクリックします
  4. [基本設定]ボックスの下部までスクロールし、[安全性の低いアプリの設定に移動する]リンクをクリックします。
  5. オプション#3を選択します:すべてのユーザーに安全性の低いアプリへのアクセスを強制します(非推奨)
  6. ウィンドウの下部にある[保存]を押します

これを行った後、ウェブサイトからの私のメールフォームは再び機能していました。幸運を!


0

Gmailから特定のAPPパスワードを作成/生成する必要がある場合があります。アプリまたはスクリプトは、通常のパスワードの代わりにこの新しいパスワードを使用します。通常のパスワードは引き続き問題なく機能します。

それは私のためにそれをしたものです。引き続き同じメールアカウントを使用しましたが、アプリ固有の新しいパスワードを生成する必要がありました。

https://support.google.com/accounts/answer/185833?hl=en

スクリーンショット

基本的には、https//security.google.com/settings/security/apppasswordsで行うことができます




0

待機する前にブレークポイントを置かないでくださいsmtp.SendMailAsync(mail);

:)

それが私がブレークポイントを削除したときにそれがこのエラーを与えるブレークポイントで待っているとき、それはうまくいった


-1

上記の解決策をすべて使用しましたが、Gmail設定からIMAPアクセスを有効にした後にのみ最終的に機能しましたGmail設定でIMAPアクセスを有効にするためのリンク

もちろん、他のソリューションのポイントも必要でした。


これは私を助けませんでした。IMAPを有効にすると、OutlookやThunderbirdなどの他のメールクライアントからGmailのメールメッセージを読むことができるようになります。
kimbaudi 2016年

-5

ホストを変更してみてください、これは新しいホストです。MozillaThunderbirdを設定しています

Host = "smtp.googlemail.com"

それは私のために働く

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