Server SMTP membutuhkan sambungan aman atau klien tidak diautentikasi. Tanggapan server adalah: 5.5.1 Diperlukan Otentikasi?

110

Saya ingin mengirim email dari aplikasi saya dan saya telah menulis kode berikut untuk mengirim email

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

Saya menjalankannya di localhost jadi kesalahan apa yang saya lakukan untuk mengirimkannya.

Ketika saya mengirim tombol itu memberikan kesalahan seperti

Server SMTP membutuhkan sambungan aman atau klien tidak diautentikasi. Respons server adalah: 5.5.1 Diperlukan Otentikasi.

Kode dalam file Web.config

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="[email protected]" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="[email protected]" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="[email protected]"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

apa yang harus saya lakukan untuk mengatasi kesalahan ini dan mengirim email ??

Abhay Andhariya
sumber
kemungkinan duplikat Mengirim email di .NET melalui Gmail
Roman R.
Saya pikir Anda mungkin harus melihat jawaban ini juga: stackoverflow.com/a/9572958/1136253
mrbengi
Saya memiliki masalah yang sama. periksa [posting ini] [1] [1]: stackoverflow.com/a/20186909/709340
Moslem Hady
Anda harus mempertimbangkan untuk menentukan data konfigurasi SMTP dalam file konfigurasi dan tidak menimpanya dalam sebuah kode - lihat data konfigurasi SMTP di systemnetmail.com/faq/4.1.aspx
Michael Freidgeim

Jawaban:

62

Pertama, periksa masalah terkait keamanan gmail. Anda mungkin telah mengaktifkan autentikasi ganda di gmail. Periksa juga kotak masuk gmail Anda jika Anda mendapatkan peringatan keamanan. Dalam kasus seperti itu periksa jawaban lain dari @mjb seperti di bawah ini

Di bawah ini adalah hal yang sangat umum yang selalu saya periksa terlebih dahulu untuk masalah seperti itu

client.UseDefaultCredentials = true;

setel ke false.

Catatan @Joe King's jawaban - Anda harus mengatur klien.UseDefaultCredentials sebelum Anda mengatur klien. Kredensial

Ronak Patel
sumber
2
Dalam hal ini, Anda harus membagikan kode Anda. Jawaban di atas adalah untuk kode yang dimaksud
Ronak Patel
7
Catatan @Joe King's jawaban - Anda harus mengatur klien.UseDefaultCredentials sebelum Anda mengatur klien. Kredensial
Aaron
1
Jawaban ini tidak akan berhasil, saya pikir kebanyakan orang menghadapi keamanan di sisi gmail. lihat jawaban mjb untuk solusi yang tepat
Jerry Liang
2
Selain itu, pastikan "Captcha" dinonaktifkan - ini mungkin diperlukan jika Anda menjalankan skrip di server jarak jauh (tidak diperlukan saat menjalankan di komputer lokal): accounts.google.com/DisplayUnlockCaptcha
Jens
3
Menyetel client.UseDefaultCredentials = false; sebelum client.Credentials dan pengaturan client.EnableSsl = true; melakukan trik dalam kasus saya.
Ditumpuk
140

Saya memiliki masalah yang sama.

Saya telah menemukan solusi ini:

Google dapat memblokir upaya masuk dari beberapa aplikasi atau perangkat yang tidak menggunakan standar keamanan modern. Karena aplikasi dan perangkat ini lebih mudah dibobol, memblokirnya membantu menjaga akun Anda lebih aman.

Beberapa contoh aplikasi yang tidak mendukung standar keamanan terbaru meliputi:

  • Aplikasi Mail di iPhone atau iPad Anda dengan iOS 6 atau lebih rendah
  • Aplikasi Mail di ponsel Windows Anda sebelum rilis 8.1
  • Beberapa klien email Desktop seperti Microsoft Outlook dan Mozilla Thunderbird

Oleh karena itu, Anda harus mengaktifkan Masuk Kurang Aman (atau akses aplikasi yang kurang aman ) di akun google Anda.

Setelah masuk ke akun google, buka:

https://www.google.com/settings/security/lesssecureapps
atau
https://myaccount.google.com/lesssecureapps

Di C #, Anda dapat menggunakan kode berikut:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("[email protected]", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Info yang dibagikan oleh Michael Freidgeim di area komentar di bawah ini:
Jawaban serupa dengan tangkapan layar https://stackoverflow.com/a/32457468/52277

mjb
sumber
1
Ini bersama dengan memastikan bahwa SSL diaktifkan dalam kode telah bekerja dengan sangat baik, terima kasih banyak
Crouch
1
Dari pada Anda @mjb untuk berbagi jawabannya. Ini menyelamatkan hidup saya :)
Mayeed
3
ini harus menjadi jawaban yang dipilih
thatOneGuy
2
Ini adalah masalah saya, terima kasih telah melalui masalah ini dan memberikan jawaban yang lebih jelas.
Bojan
Bekerja untuk saya juga. Terima kasih @mjb
Rajbir Jawanda
44

Pastikan Anda mengatur SmtpClient.Credentials setelah menelepon SmtpClient.UseDefaultCredentials = false.

Urutan ini penting karena pengaturan SmtpClient.UseDefaultCredentials = falseakan disetel ulang SmtpClient.Credentialske nol.

Joe King
sumber
2
Saya sudah mencari solusi untuk ini selama setengah jam, milik Anda adalah satu-satunya posting kecil di internet yang saya temukan yang menyebutkan pemesanan ini. Terima kasih sobat.
4
@Joe King Anda hanya luar biasa sobat ..... mencari ini sejak 3 jam :)
Jatin
1
Terima kasih @Joe King yang merupakan informasi penting yang hilang dari dokumen MS. Ini adalah solusi untuk masalah pengiriman saya dengan nama pengguna dan kata sandi juga.
Aaron
1
Ini mudah terlewatkan tetapi pemesanan itu penting karena saya baru tahu.
GatesReign
1
ya. menyelamatkan hariku. Anda perlu memanggil UseDefaultCredentials = false sebelum mengatur Kredensial.
Rendel
33

Saya telah mencari dan mencoba berbagai hal selama berjam-jam .. Untuk meringkas, saya harus mempertimbangkan poin-poin berikut:

  1. Gunakan smtp.gmail.comsebagai gantismtp.google.com
  2. Gunakan port 587
  3. Atur client.UseDefaultCredentials = false;sebelum mengatur kredensial
  4. Aktifkan Akses untuk aplikasi yang kurang aman
  5. Set client.EnableSsl = true;

Jika langkah-langkah ini tidak membantu, periksa jawaban ini .
Mungkin, Anda juga dapat menemukan sesuatu yang berguna di FAQ System.Net.Mail ini .

Ditumpuk
sumber
1
Jawaban ini sangat berguna ... menyelesaikan masalah saya. Terima kasih banyak
Hari
1
jika masih tidak berfungsi, buka tautan ini g.co/allowaccess dan izinkan akses
Portekoi
1
"Akses untuk aplikasi yang kurang aman" menyelamatkan hari saya.
Romil Kumar Jain
1
Bagian ini melakukannya untuk saya: "Aktifkan Akses untuk aplikasi yang kurang aman". Terima kasih!
Tadej
11

Coba login di akun gmail Anda. itu terkunci jika Anda mengirim email dengan menggunakan gmail SMTP. Saya tidak tahu batas email yang dapat Anda kirim sebelum terkunci tetapi jika Anda masuk satu kali maka itu berfungsi lagi dari kode. pastikan setting webconfig Anda bagus.

Shuchita Bora
sumber
Jawaban terbaik memang! Saya masuk lagi dan berhasil! PS: Saya harus memberikan captcha di Google
Bellash
Saya mendapat kesalahan ini karena akun Google saya dilindungi dengan otentikasi dua faktor. Saya akhirnya membuat akun khusus untuk mengirim email.
MvdD
8

Cobalah cara ini, saya baru saja membuat beberapa perubahan kecil:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("[email protected]");
msg.To.Add("[email protected]");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


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

    client.Send(msg);
}

Juga tolong tunjukkan file app.config Anda, jika Anda memiliki pengaturan email di sana.

meda
sumber
Saya belum mengkonfigurasi di dalamnya. apa yang harus saya tulis di sana?
Abhay Andhariya
tidak ada file app.config di aplikasi mvc saya.
Abhay Andhariya
Saya mencoba banyak solusi lain, tetapi hanya yang ini yang berhasil. Terima kasih
Adil Malik
3

Saya mengalami masalah yang sama bahkan saya menyetel "UseDefaultCredentials" ke false. Kemudian saya menemukan bahwa akar masalahnya adalah saya mengaktifkan "Verifikasi 2 Langkah" di akun saya. Setelah saya mematikannya, masalahnya hilang.

Soros Liu
sumber
4
Jangan matikan verifikasi 2 langkah. Itu ada di sana karena suatu alasan. Anda dapat membuat sandi khusus aplikasi di pengaturan GMail dan menggunakannya di SmtpClient. Anda harus tetap melakukannya daripada mengekspos kata sandi biasa.
Daniel Dyson
3

Aktifkan aplikasi yang kurang aman dari tautan ini dan boom ...

Behzad Qureshi
sumber
Ini berhasil untuk saya .. Ini pasti jawaban yang diterima
Noman
2

masukkan deskripsi gambar di sini Pastikan bahwa aplikasi Access kurang aman diizinkan.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("[email protected]");
        mail.Sender = new MailAddress("[email protected]");
        mail.To.Add("external@emailaddress");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }
Shivam Srivastava
sumber
1
Tautan untuk mengubah setelan untuk "Akses aplikasi yang kurang aman" ada di sini - google.com/settings/security/lesssecureapps Mengubah setelan tidak membantu saya mengatasi kesalahan
mvark
1

Di bawah ini adalah kode saya, saya juga memiliki kesalahan yang sama tetapi masalahnya adalah saya salah memasukkan kata sandi. Kode di bawah ini akan berfungsi dengan sempurna .. coba saja

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            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);

Anda dapat mereferensikannya di Mengirim email

Ganesh Pillai N
sumber
1

Jika ini adalah akun Google baru, Anda harus mengirim email (yang pertama) melalui antarmuka pengguna biasa. Setelah itu Anda dapat menggunakan aplikasi / robot Anda untuk mengirim pesan.

Ezequiel Santana
sumber
1

Anda harus mempertimbangkan untuk menentukan data konfigurasi SMTP dalam file konfigurasi dan tidak menimpanya dalam kode - lihat data konfigurasi SMTP di http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="[email protected]">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="[email protected]" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>
Michael Freidgeim
sumber
1

Saya mengalami masalah yang sama beberapa kali. Setelah mengaktifkan opsi aplikasi yang kurang aman, masalah teratasi. Aktifkan aplikasi yang kurang aman dari sini: https://myaccount.google.com/lesssecureapps

semoga ini bisa membantu.

Mahmud
sumber
0

beberapa server smtp (yang aman) mengharuskan Anda untuk memberikan nama pengguna dan email, jika gmailnya maka kemungkinan besar masalah 'Masuk yang Kurang Aman' perlu Anda atasi, jika tidak Anda dapat mencoba:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

perhatikan bahwa email dari dan nama pengguna berbeda tidak seperti beberapa implementasi yang merujuk keduanya sebagai sama.

memanggil metode ini dapat dilakukan seperti ini:

SendEmail("[email protected]", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);
Yakir Manor
sumber
0

Setelah mengaktifkan opsi kurang aman dan mencoba solusi lain, jika Anda masih menghadapi masalah yang sama coba gunakan kelebihan beban ini:

client.Credentials = new NetworkCredential("mymailid", "mypassword");

dari pada:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
ssmsexe
sumber
0

Saya membuat langganan Pengembang Microsoft 365 (E5) pagi ini dan menggunakannya untuk mengirim email percobaan menggunakan pengaturan berikut

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Itu tidak berfungsi pada awalnya, karena saya terus mendapatkan pesan kesalahan ini dengan pengecualian yang dilemparkan oleh kode ini. Kemudian, saya menghabiskan sekitar 4+ jam bermain dengan pengaturan pusat admin Microsoft 365 dan membaca artikel untuk mencari tahu masalahnya. Akhirnya saya mengubah kata sandi pusat admin Microsoft 365 saya dan itu bekerja dengan sangat baik. Jadi, ada baiknya untuk mencoba mengubah kata sandi saat Anda mendapatkan pesan ini, sebelum memikirkan solusi lanjutan apa pun.

Perhatikan bahwa kata sandi tidak valid karena saya masuk ke akun Microsoft 365 saya tanpa masalah apa pun. Namun, perubahan kata sandi menyelesaikan masalah.

Kushan Randima
sumber
-1

Saya juga menghadapi masalah seperti 'Server SMTP memerlukan koneksi aman atau klien tidak diautentikasi. Respons server adalah: 5.5.0 Authentication Required 'kemudian membahas begitu banyak materi internet tetapi tidak membantu saya sepenuhnya. Bagaimana saya mengatasinya seperti

langkah1: smtp.gmail.com adalah server gmail jadi buka pengaturan gmail akun Anda-> klik lihat semua pengaturan-> Penerusan dan IMAP / POP-> centang pop dan imap diaktifkan, jika tidak aktifkan-> Simpan perubahan. langkah2-klik pada gambar profil gmail Anda-> klik Kelola akun google Anda-> buka tab keamanan-> periksa Akses ke aplikasi yang kurang aman (opsi ini akan tersedia jika Anda belum memilih verifikasi dua langkah) -> secara default google akan mengaturnya sebagai nonaktif, membuatnya memungkinkan untuk menggunakan kata sandi gmail Anda yang sebenarnya untuk mengirim email. catatan: -Mengaktifkan akses gmail untuk aplikasi yang kurang aman, mungkin berbahaya untuk Anda jadi saya tidak merekomendasikan ini

langkah3: -jika akun Anda mengaktifkan verifikasi dua langkah atau ingin menggunakan kata sandi selain Gmail Anda Kata sandi asli menggunakan kata sandi khusus aplikasi, maka coba ini: - klik pada gambar profil gmail Anda-> klik Kelola akun Google Anda-> buka keamanan tab-> cari KATA SANDI APLIKASI-> pilih nama aplikasi yang diberikan-> pilih nama perangkat apa pun-> klik buat-> salin kata sandi 16-digit dan tempelkan ke aplikasi Anda di mana Anda harus memasukkan kata sandi gmail sebagai pengganti kata sandi gmail Anda yang sebenarnya.

Suryakant_Dubalgunde
sumber