59

gmail を使用してメールを送信しようとしていますが、例外が発生します。The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. i16sm1806350pag.18 - gsmtp

メールを送信するために私が書いたコードは次のとおりです。

MailMessage mail = new MailMessage(); 
mail.To.Add(txtEmail.Text.Trim()); 
mail.To.Add("Secondry@gmail.com");
mail.From = new MailAddress("mysendingmail@gmail.com");
mail.Subject = "Confirmation of Registration on Job Junction.";
string Body = "Hi, this mail is to test sending mail using Gmail in ASP.NET";
mail.Body = Body;
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
// smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
smtp.Credentials = new System.Net.NetworkCredential("mysendingmail@gmail.com", "password");
// smtp.Port = 587;
//Or your Smtp Email ID and Password
smtp.UseDefaultCredentials = false;
// smtp.EnableSsl = true;
smtp.Send(mail);

解決策を教えてください。この例外の解決策がありません。

4

13 に答える 13

60

ステップ1): smtp.EnableSsl = true;

十分でない場合:

ステップ (2):安全性の低いアプリへのアクセス」は、 Google の設定ページNetworkCredentialを使用して使用される Gmail アカウントに対して有効にする必要があります。

于 2016-05-26T09:18:00.150 に答える
42

Gmail では、安全な接続を使用する必要があります。これは、次のように web.config で設定できます。

<network host="smtp.gmail.com" enableSsl="true" ... />

また

Web サーバーでも SSL を有効にする必要があります。以下のリンクを参照

IIS 7.0 で SSL を有効にする

于 2013-07-04T07:02:46.367 に答える
12

この問題は、一晩中私を悩ませました。修正方法は次のとおりです。

  • ホストを次のように設定します: smtp.gmail.com
  • ポートを次のように設定: 587

これは TLS ポートです。他のすべての SMTP ポートを使用していましたが、成功しませんでした。このように設定した場合enableSsl = true

Dim SMTP As New SmtpClient(HOST)
SMTP.EnableSsl = True

ユーザー名とパスワードのフィールドを次のようにトリミングします (ユーザーが私のように登録時に電子メールとパスワードを入力した場合のエラーを防ぐための良い方法です)。

SMTP.Credentials = New System.Net.NetworkCredential(EmailFrom.Trim(), EmailFromPassword.Trim())

TLS ポートを使用すると、SMTP が SMTPS として扱われ、認証が可能になります。セキュリティ上のリスクがあるアプリや古いアプリがメールでブロックされているという警告がすぐに Google から届きました。「安全性の低いアプリを有効にする」に進みました。次に、電話番号に関する情報を更新すると、Google から確認コードがテキスト メッセージで送信されました。私はそれを入力し、ほら!

アプリケーションを再度実行したところ、成功しました。私はこのスレッドが古いことを知っていますが、スローされたすべての例外を読んでネットを精査し、すべての行の後に MsgBoxes を追加して、何が問題なのかを確認しました。私の変数はすべてMySQLデータベースから来ているので、読みやすくするために変更された私の作業コードは次のとおりです。

Try
    Dim MySubject As String = "Email Subject Line"
    Dim MyMessageBody As String = "This is the email body."
    Dim RecipientEmail As String = "recipient@gmail.com"
    Dim SenderEmail As String = "sender@gmail.com"
    Dim SenderDisplayName As String = "FirstName LastName"
    Dim SenderEmailPassword As String = "SenderPassword4Gmail"

    Dim HOST = "smtp.gmail.com"
    Dim PORT = "587" 'TLS Port
    
    Dim mail As New MailMessage
    mail.Subject = MySubject
    mail.Body = MyMessageBody
    mail.To.Add(RecipientEmail) 
    mail.From = New MailAddress(SenderEmail, SenderDisplayName)

    Dim SMTP As New SmtpClient(HOST)
    SMTP.EnableSsl = True
    SMTP.Credentials = New System.Net.NetworkCredential(SenderEmail.Trim(), SenderEmailPassword.Trim())
    SMTP.DeliveryMethod = SmtpDeliveryMethod.Network 
    SMTP.Port = PORT
    SMTP.Send(mail)
    MsgBox("Sent Message To : " & RecipientEmail, MsgBoxStyle.Information, "Sent!")
Catch ex As Exception
    MsgBox(ex.ToString)
End Try

このコードが OP だけでなく、パーティーに遅れて到着する私のような人にも役立つことを願っています。楽しみ。

于 2016-09-04T17:10:32.247 に答える
8

https://www.google.com/settings/security/lesssecureapps」 Gmail アカウントにログインした後、このリンクを使用し、[オン] をクリックします。その後、アプリケーションを実行すると、確実に動作します。

于 2016-07-22T07:40:21.287 に答える
3

(私のように) portusernamepasswordなどのすべてのパラメータをシステムに渡し、コードの変更が許可されていない場合は、次のように簡単に変更できますweb.config

<system.net>
  <mailSettings>
    <smtp>
      <network enableSsl="true"/>
    </smtp>
  </mailSettings>
</system.net>
于 2017-11-03T21:02:49.927 に答える
3

私のような非常に基本的なユーザーの場合、(FromEmailAddress) からのメールは Gmail で作成された実際のメール アドレスであり、それを機能させるには安全性の低いアプリ アクセスを設定する必要もあります。 https://myaccount.google.com/lesssecureapps

次に、ステートメントの順序も正しいはずです。

    public static bool SendEmail(string body, string subject, string toEmail)
            {
                MailAddress fromAddress = new MailAddress("noreply.mymail@gmail.com", "Mail Support");
                MailAddress toAddress = new MailAddress(toEmail, "Dear Customer");
                const string fromPassword = "mymail_login_password.";
                SmtpClient smtpClient = new SmtpClient();
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials = new NetworkCredential(fromAddress.Address, fromPassword);
                smtpClient.Host = "smtp.gmail.com";
                smtpClient.Port = 587;
                smtpClient.EnableSsl = true;
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                MailMessage mailMessage = new 
MailMessage(fromAddress.Address,toAddress.Address,subject, body);
                try
                {
                    smtpClient.Send(mailMessage);
                    return true;
                }
                catch (SmtpException ex)
                {
                      return false;
                }
            }
于 2022-01-06T07:55:34.243 に答える