259

何らかの理由で、受け入れられた回答も他の回答も、「Gmailを介して.NETで電子メールを送信する」には機能しません。なぜ彼らは働かないのでしょうか?

更新:私は他の質問のすべての答え(受け入れられたものとそうでないもの)を試しましたが、どれもうまくいきません。

私はそれが他の誰かのために働くかどうか知りたいだけです、さもなければグーグルは何かを変えたかもしれません(それは以前に起こりました)。

を使用するコードを試してみると、SmtpDeliveryMethod.NetworkSend(message)でSmtpExceptionがすぐに発生します。メッセージは

SMTPサーバーに安全な接続が必要であるか、クライアントが認証されていません。

サーバーの応答は次のとおりです。

5.5.1認証が必要です。詳細については、 "<-をご覧ください。まじめな話、それで終わりです。

アップデート:

これは私がずっと前に尋ねた質問であり、受け入れられた答えは、私がさまざまなプロジェクトで何度も何度も使用したコードです。

この投稿や他のEmailSenderプロジェクトのアイデアのいくつかを取り入れて、CodeplexでEmailSenderプロジェクトを作成しました。テスト容易性のために設計されており、GoDaddyやGmailなどの私のお気に入りのSMTPサービスをサポートしています。

4

29 に答える 29

76

他のすべてが失敗した場合、以下はほぼ確実にあなたの質問への答えになります:

まったく同じエラーが発生しました.Googleの新しいパスワード強度測定アルゴリズムが変更され、現在のパスワードが弱すぎると見なされ、それについて何も言われませんでした(メッセージや警告でさえありません)...どうやってこれを発見しましたか? さて、私は自分のパスワードを変更して、それが役立つかどうかを確認することにしました (他のすべてを試しても無駄でした)。パスワードを変更すると、うまくいきました!

次に、実験のために、パスワードを以前のパスワードに戻してどうなるかを試してみましたが、Gmail では実際にはこれを許可されませんでした。パスワードが弱すぎます」と表示され、古いパスワードに戻せませんでした。このことから、a) x か月ごとに 1 回パスワードを変更する必要があるか、b) のいずれかの理由で、エラーが発生していると考えました。前に言ったように、彼らのパスワード強度アルゴリズムが変更されたため、どこにでもログインしようとしたときに何も言わなかったにもかかわらず、私が持っていた弱いパスワードは受け入れられませんでした! 私の脆弱なパスワードは約 4 か月前のもので、Gmail で使用できるようになったため、これ (番号 2) が最も可能性の高いシナリオです。

彼らがこれについて何も言わなかったのはかなり悪いですが、それは理にかなっています. ハイジャックされたメールのほとんどは、gmail 以外のソフトウェアを使用してログインしているため、Gmail 環境外で Gmail を使用する場合は、より強力なパスワードが必要になると思います。

于 2011-02-08T09:51:49.623 に答える
72

上記の他のトラブルシューティング手順に加えて、GMailアカウントで2要素認証( 2段階認証とも呼ばれます)を有効にしている場合は、アプリケーション固有のパスワードを生成し、それを新たに使用する必要があることも付け加えておきます。 SMTP経由で認証するために生成されたパスワード

パスワードを作成するには、 https: //www.google.com/settings/にアクセスし、[アプリケーションとサイトの承認]を選択してパスワードを生成します。

于 2012-03-05T19:48:48.247 に答える
59
Turn On Access For Less Secure Apps and it will work for all no need to change password.

Gmail 設定へのリンク

ここに画像の説明を入力

于 2015-02-19T09:18:21.340 に答える
32

前述の状況のいくつかが原因で、gmail アカウントからメールを送信する際にも問題が発生しました。これがどのように機能し、同時に柔軟性を維持したかの要約です。

  • まず、GMail アカウントをセットアップします。
    • IMAP を有効にして、正しい最大メッセージ数をアサートします(ここで実行できます)。
    • パスワードが 7 文字以上で、強力であることを確認してください (Google によると)。
    • 最初にキャプチャ コードを入力する必要がないことを確認してください。これを行うには、ブラウザからテスト メールを送信します。
  • web.config (または app.config、まだ試していませんが、Windows アプリケーションで動作させるのと同じくらい簡単だと思います) を変更します。
<configuration>
    <appSettings>
        <add key="EnableSSLOnMail" value="True"/>   
    </appSettings>

    <!-- other settings --> 

    ...

    <!-- system.net settings -->
    <system.net>
        <mailSettings>
            <smtp from="yourusername@gmail.com" deliveryMethod="Network">
                <network 
                    defaultCredentials="false" 
                    host="smtp.gmail.com" 
                    port="587" 
                    password="stR0ngPassW0rd" 
                    userName="yourusername@gmail.com"
                    />
                <!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
            </smtp>
        </mailSettings>
    </system.net>
</configuration>
Add a Class to your project:

Imports System.Net.Mail

Public Class SSLMail

    Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)

        GetSmtpClient.Send(e.Message)

        'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too:
        e.Cancel = True

    End Sub

    Public Shared Sub SendMail(ByVal Msg As MailMessage)
        GetSmtpClient.Send(Msg)
    End Sub

    Public Shared Function GetSmtpClient() As SmtpClient

        Dim smtp As New Net.Mail.SmtpClient
        'Read EnableSSL setting from web.config
        smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail"))
        Return smtp
    End Function

End Class

これで、メールを送信したいときはいつでも、次のように電話するだけですSSLMail.SendMail

たとえば、PasswordRecovery コントロールを含むページでは次のようになります。

Partial Class RecoverPassword
Inherits System.Web.UI.Page

Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail
    e.Message.Bcc.Add("webmaster@example.com")
    SSLMail.SendMail(e)
End Sub

End Class

または、コード内のどこでも呼び出すことができます:

SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"})

これが、この投稿に出くわした人の助けになることを願っています! (VB.NET を使用しましたが、任意の .NET 言語に変換するのは簡単だと思います。)

于 2011-05-22T14:35:41.547 に答える
14

Oh...It's amazing... First I Couldn't send an email for any reasons. But after I changed the sequence of these two lines as below, it works perfectly.

//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");
于 2011-06-05T09:54:52.373 に答える
13
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername@gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername@gmail.com","yourusername@gmail.com","test","testbody")

"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" のようなエラーが表示された場合は、この行が含まれていることSMTPClientObj.UseDefaultCredentials = Falseと、この行が含まれていることを確認してください。の前にすべきSMTPClientObj.Credentialsです。

これらの 2 行を逆に切り替えようとしたところ、5.5.1 Authentication Required エラーが返されました。

于 2010-09-26T09:04:47.257 に答える
12

これを修正する簡単な手順:

1) Gmail にサインインする

2) このページhttps://www.google.com/settings/security/lesssecureappsに移動し、「オンにする」に設定します

于 2016-04-11T03:56:30.047 に答える
12

問題は、gmail を介して送信する技術的な能力の問題ではありません。これはほとんどの状況で機能します。送信するマシンを取得できない場合は、通常、少なくとも 1 回はコントロールでマシンが人間によって認証されていないことが原因です。

ほとんどのユーザーが直面する問題は、Google が送信制限を常に変更することを決定することです。ソリューションには常に防御コードを追加する必要があります。エラーが発生し始めた場合は、送信速度を落として、しばらく送信を停止してください。送信を試み続けると、Google によって、再度送信できるようになるまでの遅延期間が長くなることがあります。

現在のシステムで行ったことは、各メッセージ間で 1.5 秒の遅延で送信することです。その後、エラーが発生した場合は、5 分間停止してから再度開始します。これは通常は機能し、アカウントの上限まで送信できます (最後に確認したところ、プレミア カスタマーのログインは 1 日あたり 2,000 件でした)。

于 2009-08-26T06:28:58.137 に答える
11

同じ問題が発生しましたが、ウイルス保護によって送信される「スパム」メールがブロックされていたことが判明しました。これをオフにすると、ポート587を使用してGMail経由でSMTPメールを送信できるようになりました

于 2010-10-01T23:50:15.153 に答える
11

ここで他に何も機能しない場合は、サードパーティのアプリケーションからの Gmail アカウントへのアクセスを許可する必要がある場合があります。これは私の問題でした。アクセスを許可するには、次の手順を実行します。

  1. Gmail アカウントにサインインします。
  2. このページhttps://accounts.google.com/DisplayUnlockCaptchaにアクセスし、ボタンをクリックしてアクセスを許可してください。
  3. このページhttps://www.google.com/settings/security/lesssecureappsにアクセスして、安全性の低いアプリのアクセスを有効にします。

これは私にとってはうまくいきました。それが他の誰かにとってうまくいくことを願っています!

于 2015-05-02T17:45:34.727 に答える
8

eglasiusが一致するenableSsl設定がないと述べたため、これに必要な.NETバージョンはわかりません(私は.NET 4.0を使用していますが、.NET 2.0以降で動作すると思われます)が、この構成はうまく機能しましたme (プログラムによる構成を使用する必要はありません):

<system.net>
  <mailSettings>
    <smtp from="myusername@gmail.com" deliveryMethod="Network">
      <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="myusername@gmail.com"/>
    </smtp>
  </mailSettings>
</system.net>

最初に Gmail アカウントで POP または IMAP を有効にする必要がある場合があります: https://mail.google.com/mail/?shva=1#settings/fwdandpop

最初に通常のメールクライアントで試すことをお勧めします...

于 2010-09-15T12:12:23.313 に答える
6

@Andres Pompiglio: はい、パスワードを少なくとも 1 回変更する必要があります。このコードは正常に機能します。

//Satrt Send Email Function
public string SendMail(string toList, string from, string ccList,
    string subject, string body)
{

    MailMessage message = new MailMessage();
    SmtpClient smtpClient = new SmtpClient();
    string msg = string.Empty;
    try
    {
        MailAddress fromAddress = new MailAddress(from);
        message.From = fromAddress;
        message.To.Add(toList);
        if (ccList != null && ccList != string.Empty)
            message.CC.Add(ccList);
        message.Subject = subject;
        message.IsBodyHtml = true;
        message.Body = body;
        // We use gmail as our smtp client
        smtpClient.Host = "smtp.gmail.com";   
        smtpClient.Port = 587;
        smtpClient.EnableSsl = true;
        smtpClient.UseDefaultCredentials = true;
        smtpClient.Credentials = new System.Net.NetworkCredential(
            "Your Gmail User Name", "Your Gmail Password");

        smtpClient.Send(message);
        msg = "Successful<BR>";
    }
    catch (Exception ex)
    {
        msg = ex.Message;
    }
    return msg;
}
//End Send Email Function

そして、次を使用して関数を呼び出すことができます。

Response.Write(SendMail(recipient Address, "UserName@gmail.com", "ccList if any", "subject", "body"))
于 2010-11-25T04:03:58.653 に答える
5
  1. まずGmailアカウントの設定を確認し、「安全性の低いアプリのアクセス」からオンにします ここに画像の説明を入力

Gmail などの安全なアプリを使用してアカウントにアクセスすることを強くお勧めします。Google が作成したすべてのアプリは、これらのセキュリティ基準を満たしています。一方、安全性の低いアプリを使用すると、アカウントが脆弱なままになる可能性があります. もっと詳しく知る。

  1. 設定

    smtp.UseDefaultCredentials = false;
    

    smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
    
于 2016-02-27T11:53:56.023 に答える
5

アカウントで安全性の低いアプリを有効にする: https://www.google.com/settings/security/lesssecureapps

于 2015-12-27T00:39:01.697 に答える
5

この同じエラー ( 「SMTP サーバーには安全な接続が必要であるか、クライアントが認証されていませんでした。サーバーの応答は: 5.5.1 認証が必要です。詳しくはこちらをご覧ください」 ) が発生し、間違ったパスワードを使用していることに気付きました。ログイン資格情報を修正したところ、正しく送信されました。

私はこれが遅いことを知っていますが、おそらくこれは他の誰かを助けるでしょう.

于 2010-08-03T22:34:40.980 に答える
5

私も多くの解決策を試みましたが、いくつかの変更を加えるとうまくいきます

host = smtp.gmail.com
port = 587
username = email@gmail.com
password = password
enabledssl = true

上記の smtpclient を使用すると、パラメーターは gmail で機能します

于 2011-05-14T13:55:02.007 に答える
5

また、ログインに使用したアカウントが何らかの理由で Google によって無効にされていることもわかりました。パスワードを(以前と同じに)リセットすると、問題なくメールを送信できました。5.5.1 メッセージも受け取っていました。

于 2011-02-03T21:58:43.180 に答える
4

あなたのためのさらに別の可能な解決策。IMAP経由でgmailに接続する際にも同様の問題がありました。私が遭遇したすべての解決策を試した後、SO のここや他の場所で読むことができます (たとえば、IMAP を有効にし、https://accounts.google.com/b/0/displayunlockcaptchaを使用してメールへの安全性の低いアクセスを有効にします)など)、実際にもう一度新しい Gmail アカウントを設定しました。

私が最初に作成した Gmail アカウントである最初のテストでは、メインの Gmail アカウントに接続していました。これにより、間違ったアカウントが Google によって参照されるという不規則な動作が発生しました。たとえば、https://accounts.google.com/b/0/displayunlockcaptchaを実行すると、目的のために作成したメイン アカウントではなく、メイン アカウントが開きました。

そのため、新しいアカウントを作成してメイン アカウントに接続しなかった場合、上記の適切な手順をすべて実行した後、正常に機能することがわかりました。

私はまだこれを確認していません(つまり、再現しています)が、どうやら私のためにそれを行ったようです...それが役に立てば幸いです。

于 2015-01-16T15:36:33.407 に答える
4

これらのエラーには、1 つ以上の理由があります。

  • ローカル システムの Gmail (またはその他の場合) でログインします。

  • また、安全性の低いアプリを確認し、「オンにする」に設定してください。ここに GMAIL のリンクがあります。 https://www.google.com/settings/security/lesssecureapps

  • 電子メール コードで EnableSsl を確認し、true に設定します。

    smtp.EnableSsl = true;
    
  • また、現在使用しているポートも確認してください。25 はグローバルですが、587 などの他のものについても確認できます。ここで確認してください。すべての SMTP 通信は 25 を超えて発生しますか?

  • リモートの場合: 上記のVlad Tamasの回答を確認してください。

于 2017-01-04T06:25:17.400 に答える
4

もう 1 つわかったことは、少なくとも 1 回はパスワードを変更する必要があるということです。また、安全なレベルのパスワードを使用してみてください (パスワード、123456 などと同じユーザーを使用しないでください)。

于 2009-09-22T14:20:51.283 に答える
3

ポート 465 経由で接続することもできますが、System.Net.Mail 名前空間のいくつかの制限により、コードを変更する必要がある場合があります。これは、名前空間が暗黙的な SSL 接続を確立する機能を提供していないためです。これについてはhttp://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspxで説明されています。 CDO (Collaborative Data Object) の使用方法の例を別の説明 ( C# 経由の GMail SMTP .Net エラーですべてのポート) で提供しています。

于 2010-10-03T13:23:22.017 に答える
3

この問題は解決しました。明らかに、そのメッセージは複数のエラー タイプで使用されています。私の問題は、送信メールが最大の 500 件に達したことでした。

アカウントにログインし、手動でメールを送信してみてください。制限に達した場合は通知されます

于 2011-04-20T19:02:53.100 に答える
3

Gmail アカウントで 2 段階認証プロセスを使用している場合は、アプリ パスワードを生成する必要があります。 https://support.google.com/accounts/answer/185833?p=app_passwords_sa&hl=en&visit_id=636903322072234863-1319515789&rd=1 [アプリ パスワードの生成方法] オプションを選択し、表示される手順に従います。生成されたアプリ パスワードをコピーしてどこかに貼り付けます。[完了] をクリックすると元に戻すことができなくなります。

于 2019-04-08T15:57:39.383 に答える
2
smtp.Host = "smtp.gmail.com"; //host name
smtp.Port = 587; //port number
smtp.EnableSsl = true; //whether your smtp server requires SSL
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
smtp.Timeout = 20000;
于 2013-11-26T08:31:51.427 に答える
1

Gmail のパスワードを変更してもう一度お試しください。その後は機能するはずです。

理由はわかりませんが、ホスティングを変更するたびにパスワードを変更する必要があります。

于 2016-07-09T20:54:50.613 に答える