なぜこれが機能しないのか、私の人生を理解できません
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%正しいです。
これは古いトピックであることは知っていますが、Googleはセキュリティ設定で何かを変更しました。
「最近、Googleアカウントへのログイン試行をブロックしました」というGoogleからのメールでメールをチェックするまで、すべての回答に苦労していました。
それがこのページに私を導きました: Google Account Security
[安全性の低いアプリのアクセス]セクションで、C#アプリケーションのような他のデバイス/アプリケーションからのアカウントへのアクセスを有効にできます。
「アプリケーション固有」セクションがなくなったことに注意してください。
これが誰かを助けることを願っています...私は私の人生の30分を失ったばかりです...
ログイン情報が100%正しい場合は、_UseDefaultCredentials = false
_firstを設定してから、使用する認証情報を設定する必要がありますCredentials = new NetworkCredential("[email protected]", "myGmailPasswordHere")
。
最初に認証情報を設定した場合、_UseDefaultCredentials = false
_を設定すると、Credentials
プロパティがnull
になります。
これは有線ですが、私には起こりました。
コードをデバッグし、smtp.Send(message);
を呼び出す前にCredentials
プロパティがnullかどうかを確認します。その場合は、順序を逆にしてみてください。正しい順序になっているようですが、nullの場合はインライン初期化を使用しないでください。
それが役に立てば幸い。
EDIT:2段階認証を使用している場合は、 App固有のパスワードを使用していることを確認してください
Gmailでは、アプリケーション固有のパスワード(メインのパスワードではない)が必要なようです。
これを確認してください: http://support.google.com/mail/bin/answer.py?hl=ja&answer=117327
最近同じ問題がありました。
以前にこの問題があり、次の手順に従って修正しました。
このオプションをオフにしただけで、コードは正常に実行されました。
これは私にとってはうまくいきました
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つの「ステップ」が必要でした。
UseDefaultCredentials = false
_を設定してから、使用する認証情報を設定しますCredentials = new NetworkCredential("[email protected]", "myGmailPasswordHere")
。最初に資格情報を設定すると、_UseDefaultCredentials = false
_を設定すると、資格情報プロパティがnull
になります。_<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"),
非常に簡単ですが、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アカウントアクティビティ をたどってください。次に、アカウントによる最近のデバイスとアクティビティを取得します。表示されている場合は、現在のデバイスから現在のアクティビティをブロックします。これのブロックを解除してください。その後、もう一度メールを送信してみてください。
ありがとう
Amazon AWSホスティングで実行されているASP.NETアプリケーションからsmtp.gmail.comにアクセスする同じ問題がありました。私の設定は正しいことがわかりました-別のコンピューターからも正常に機能していました-いつもと違う場所からログインしようとしたため、gmailは私のログイン試行を拒否しました。 Webインターフェイス(www.gmail.com)を介してGmailにログオンし、キャプチャに応答する必要がありました。その後それは働いた。
次のようにコールバックします。エラーを無視するように_System.Net
_に指示してください!
Send()
を呼び出す前にこれを追加します
_ServicePointManager.ServerCertificateValidationCallback =
delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
smtp.Send(mail);
_
私の問題は、Gmailアカウントのドメイン所有者が「安全性の低いアプリへのアクセス」と2段階認証の両方を無効にしていたことでした。それを有効にする方法がありませんでした、私は設定を見ることさえできませんでした。そのため、代わりに個人アカウントを使用してテストしましたが、問題なく動作しました。