Kesalahan Gmail: Server SMTP membutuhkan koneksi yang aman atau klien tidak diautentikasi. Respons server adalah: 5.5.1 Diperlukan Otentikasi

260

Saya menggunakan kode berikut untuk mengirim email. Kode ini berfungsi dengan benar di Mesin lokal saya. Tetapi pada server Produksi saya mendapatkan pesan kesalahan

var fromAddress = new MailAddress("[email protected]");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("[email protected]");

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

Dan di A / c Gmail saya, saya telah menerima email berikut setelah saya menjalankan kode dari server produksi

Hai,

Seseorang baru-baru ini menggunakan kata sandi Anda untuk mencoba masuk ke Akun Google Anda [email protected]. Orang ini menggunakan aplikasi seperti email, klien atau perangkat seluler.

Kami mencegah upaya masuk jika pembajak mencoba mengakses akun Anda. Harap tinjau detail upaya masuk:

Jumat, 3 Januari 2014 13:56:08 pukul UTC Alamat IP: xxx.xx.xx.xxx (abcd.net.) Lokasi: Philadelphia PA, Philadelphia, PA, USA

Jika Anda tidak mengenali upaya masuk ini, orang lain mungkin mencoba mengakses akun Anda. Anda harus masuk ke akun Anda dan segera mengatur ulang kata sandi Anda.

Setel ulang kata sandi

Jika ini adalah Anda dan Anda mengalami kesulitan mengakses akun Anda, selesaikan langkah pemecahan masalah yang tercantum di http://support.google.com/mail?p=client_login

Hormat saya, Tim Akun Google

vcs
sumber
apakah Anda memiliki akses ke server produksi
Arshad
Saya tidak memiliki akses ke server produksi
vcs
Matikan verifikasi 2 langkah ..
Mangesh
1
Selain itu, pastikan google "Captcha" dinonaktifkan - ini mungkin diperlukan jika Anda menjalankan skrip di server jarak jauh (tidak perlu saat dijalankan di mesin lokal): accounts.google.com/DisplayUnlockCaptcha
Jens

Jawaban:

197

Ini umumnya terjadi ketika Anda mencoba masuk dari zona waktu yang berbeda atau Komputer Alamat IP. Server produksi Anda dan id surat yang Anda gunakan keduanya berada di zona waktu yang berbeda. Pilih salah satu dari dua solusi ini:

1) Masuk ke server produksi melalui akses jarak jauh, dan masuk ke Gmail sekali dengan kredensial Anda. Mereka akan meminta konfirmasi, mengonfirmasi dan keluar.

Atau 2) masuk gmail ke komputer lokal Anda, Ikuti Tautan ini dan pilih tinjau aktivitas ini dan ambil tindakan yang sepatutnya.

Arshad
sumber
21
Sedikit komentar: buka security.google.com/settings/security/activity dan di sini Anda akan melihat koneksi yang diblokir dari kode Anda. Izinkan mereka dan itu akan membantu dalam kasus ini.
Alex Zhukovskiy
68
Ini juga akan banyak membantu: google.com/settings/security/lesssecureapps
George
Ya, alasannya adalah 2 langkah verifikasi diaktifkan untuk akun gmail. Pilih Aplikasi / Perangkat dan klik tombol Generate support.google.com/accounts/answer/185833
smily
8
Selain itu, pastikan google "Captcha" dinonaktifkan - ini mungkin diperlukan jika Anda menjalankan skrip di server jarak jauh (tidak perlu saat dijalankan di mesin lokal): accounts.google.com/DisplayUnlockCaptcha
Jens
301

Ketika Anda mencoba mengirim surat dari kode dan Anda menemukan kesalahan "Server SMTP membutuhkan koneksi yang aman atau klien tidak dikonfirmasi. Respons server adalah: 5.5.1 Diperlukan Otentikasi", daripada kesalahan yang mungkin terjadi karena kasus-kasus berikut.

kasus 1: ketika kata sandi salah

kasus 2: ketika Anda mencoba masuk dari beberapa Aplikasi

kasus 3: ketika Anda mencoba login dari domain selain dari zona waktu / domain / komputer Anda (Ini adalah kasus di sebagian besar skenario ketika mengirim email dari kode)

Ada solusi untuk masing-masing

solusi untuk kasus 1: Masukkan kata sandi yang benar.

solusi 1 untuk kasus 2 : buka pengaturan keamanan di tautan followig https://www.google.com/settings/security/lesssecureapps dan aktifkan aplikasi yang kurang aman. Sehingga Anda dapat masuk dari semua aplikasi.

solusi 2 untuk kasus 2 : (lihat https://stackoverflow.com/a/9572958/52277 ) aktifkan otentikasi dua faktor (alias verifikasi dua langkah), dan kemudian buat kata sandi khusus aplikasi. Gunakan kata sandi yang baru dibuat untuk mengotentikasi melalui SMTP.

solusi 1 untuk kasus 3: (Ini mungkin membantu) Anda perlu meninjau aktivitas. tetapi meninjau aktivitas tidak akan membantu karena standar keamanan terbaru tautannya tidak akan berguna. Jadi coba kasus di bawah ini.

solusi 2 untuk kasus 3 : Jika Anda telah meng-host kode Anda di suatu tempat di server produksi dan jika Anda memiliki akses ke server produksi, daripada mengambil koneksi remote desktop ke server produksi dan mencoba masuk sekali dari browser server produksi. Ini akan menambah pengecualian untuk masuk ke google dan Anda akan diizinkan masuk dari kode.

Tetapi bagaimana jika Anda tidak memiliki akses ke server produksi. coba solusinya 3

solusi 3 untuk kasus 3: Anda harus mengaktifkan login dari zona waktu / ip lain untuk akun google Anda.

untuk melakukan ini ikuti tautan https://g.co/allowaccess dan izinkan akses dengan mengklik tombol lanjutkan.

Dan itu saja. Ini dia Sekarang Anda dapat masuk dari komputer mana pun dan dengan cara apa pun ke akun Google Anda.

Roshan Parmar
sumber
10
Solusi 2! Kamu cantik kecil!
George Harnwell
2
tautan lesssecureapps di atas membantu :)
Gautam Jain
Wow, ini harus ditandai sebagai jawaban yang diterima. Terima kasih.
Nic
5
situs yang diinangi pada azure perlu mengikuti solusi 3 untuk kasus 3: tautan terakhir yang membantu g.co/allowaccess
Ravi Anand
1
Solusi 2 untuk kasus 3 - bekerja seperti pesona bagi saya. Terima kasih.
ss_mj
106

Ini masalah keamanan, Gmail secara default mencegah akses untuk akun email Anda dari aplikasi khusus. Anda dapat mengaturnya untuk menerima login dari aplikasi Anda.

Setelah Masuk ke email Anda, KLIK DI SINI

Ini akan membawa Anda ke halaman berikut

Halaman Aplikasi Kurang Aman

Sayka
sumber
1
Juga, jika Anda memiliki domain khusus, pengguna harus diaktifkan terlebih dahulu oleh administrator domain untuk memungkinkan akses ke aplikasi yang kurang aman. Jika Anda seorang admin domain, buka tautan berikut untuk mengaktifkan admin.google.com/AdminHome#ServiceSettings/…
user551113
2
Jawaban ini bagus. Itu bekerja seperti pesona. Terima kasih.
Thomas.Benz
24

Setelah menghabiskan beberapa jam hari ini mencoba setiap solusi di sini, saya masih tidak dapat mengatasi kesalahan yang tepat ini. Saya telah menggunakan gmail berkali-kali dengan cara ini sehingga saya tahu itu adalah sesuatu yang bodoh, tetapi tidak ada yang saya perbaiki. Saya akhirnya menemukan solusi dalam kasus saya jadi saya pikir saya akan berbagi.

Pertama, sebagian besar jawaban di atas juga diperlukan, tetapi dalam kasus saya, itu adalah masalah sederhana pemesanan kode sambil membuat SmtpClient kelas.

Dalam cuplikan kode pertama di bawah ini, perhatikan di mana Credentials = credsbaris tersebut berada. Implementasi ini akan menghasilkan kesalahan yang dirujuk dalam pertanyaan ini bahkan jika Anda sudah mengatur semuanya dengan benar.

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
}

Namun, jika Anda memindahkan panggilan setter Kredensial ke bawah, email akan dikirim tanpa kesalahan. Saya tidak membuat perubahan pada kode di sekitarnya ... yaitu ... nama pengguna / kata sandi, dll. Jelas, apakah EnableSSL, UseDefaultCredentials, or the DeliveryMethodtergantung pada Credentialsyang ditetapkan pertama ... Saya tidak menguji semua untuk mengetahui yang mana itu meskipun .

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
}

Semoga ini membantu menyelamatkan orang lain beberapa sakit kepala di masa depan.

pengguna1011627
sumber
2
Dalam kasus saya, saya memiliki masalah yang sama seperti milik Anda, menyusun ulang kode sehingga Kredensial yang datang terakhir berhasil bagi saya.
Dev
1
Saya tidak percaya tapi berhasil! Saya telah mengaktifkan 2 langkah, karena tidak ingin mengaktifkan bendera yang kurang aman, tetapi sampai saya menempatkan Kredensial terakhir sebelum Kirim itu tidak ingin berfungsi. Luar biasa!
Čikić Nenad
6
Masalahnya adalah bahwa dalam UseDefaultCredentialssetter ada kode ini: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;yang menimpa credentialsditetapkan oleh Credentialssetter. Bagi saya sepertinya ini SmtpClientadalah bug
Tomasz Madeyski
@TomaszMadeyski ini harus menjadi jawaban, bukan komentar! itu adalah masalah saya ... bagaimana bisa saya berpikir bahwa jika saya menetapkan kredensial pada konstruktor dan kemudian menetapkan ke nilai yang salah lagi UseDefaultCredentials = false itu menimpa kredensial ... gila !! tapi itu terjadi .... terima kasih youuuuu
FabianSilva
12

Hai saya punya masalah yang sama,

apa yang telah saya lakukan untuk menyelesaikannya. adalah untuk mengaktifkan aplikasi yang kurang aman. setelah terhubung ke akun gmail saya. Saya memasukkan tautan ini: https://www.google.com/settings/security/lesssecureapps

Lalu saya nyalakan aplikasi yang aman dan, dan itu berhasil. telah dikatakan juga di atas

Barak Rosenfeld
sumber
Jadi apa bedanya dari jawaban Anda untuk jawaban di atas ? Jawaban yang sama diberikan sebelum Anda pada 12 Januari '15 di 10:36.
Dush
11

Saya memiliki kode yang sebelumnya berfungsi yang melempar kesalahan ini sekarang. Tidak ada masalah pada kata sandi. Tidak perlu mengonversi pesan ke base64 juga. Ternyata, saya perlu melakukan hal berikut:

  1. Matikan otentikasi 2-faktor
  2. Setel "Izinkan aplikasi yang kurang aman" ke AKTIF
  3. Masuk ke akun gmail Anda dari server produksi
  4. Buka di sini juga untuk menyetujui aktivitas login
  5. Jalankan aplikasi Anda di server produksi

Kode kerja

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

        client.Send("[email protected]", emailTo, subject, body);
    }

Mematikan otentikasi 2-faktor Mematikan otentikasi 2-faktor

Setel "Izinkan aplikasi yang kurang aman" ke AKTIF (halaman yang sama, perlu gulir ke bawah) Izinkan aplikasi yang kurang aman

Jeson Martajaya
sumber
9

Cukup ikuti langkah di email google dan aktifkan aplikasi yang kurang aman.

Trung
sumber
6

Saya telah menghadapi masalah yang sama. Ini terjadi ketika Anda mengaktifkan Verifikasi 2 Langkah (MFA). Matikan Verifikasi 2 Langkah saja dan masalah Anda harus diselesaikan.

Anik
sumber
Saya tidak memiliki dua langkah yang diaktifkan untuk akun ini dan memiliki masalah ini.
Shiv
4

Di bawah ini adalah kode saya. Saya juga memiliki kesalahan yang sama tetapi masalahnya adalah saya memberikan kata sandi yang salah. Kode di bawah ini akan berfungsi dengan baik..mencobanya

            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 bisa merujuknya di blog saya

Ganesh Pillai N
sumber
saya menggunakan kode yang sama yang bekerja di mesin lokal saya tetapi tidak berfungsi di server. Mendapatkan kesalahan Server SMTP membutuhkan koneksi yang aman atau klien tidak diautentikasi. Respons server adalah: 5.5.1 Diperlukan Otentikasi. .
Akshay Chawla
1
Saya menghubungi penyedia hosting saya, mereka berkata: Kami dapat melihat bahwa Anda telah mengkonfigurasi SMTP bagian ketiga (smtp.gmail.com) yang tidak akan mendukung di lingkungan server bersama kami. Karena penyalahgunaan fungsi email atau masalah spam yang berlebihan, fungsi email tidak didukung. Anda dapat mengirim email menggunakan PHPMailer, yang sangat populer dan sering digunakan. tapi situs saya dibangun di mvc c #, jadi bagaimana saya bisa menggunakan phpmailer?
Akshay Chawla
3

cukup nyalakan pengaturan atau gmail. lihat di bawah gambar yang diberikan:

masukkan deskripsi gambar di sini

Rajesh Paliwal
sumber
2

Saya memiliki masalah yang sama untuk aplikasi yang digunakan untuk Microsoft Azure.

SmtpException: Server SMTP memerlukan koneksi aman atau klien tidak diautentikasi. Respons server adalah: 5.5.1 Diperlukan Otentikasi.

Pertama saya menyetujui semua perangkat yang tidak dikenal (beberapa alamat ip yang berasal dari Irlandia) pada halaman berikut (masuk sebagai pengguna gmail): https://security.google.com/settings/u/1/security/secureaccount

Saya menggunakan pengaturan berikut untuk klien:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "my_password"); 

Itu mulai bekerja hanya setelah saya mengatur properti berikut di smtp-client:

client.TargetName = "STARTTLS/smtp.gmail.com";
haiiaaa
sumber
2

Yang berhasil bagi saya adalah mengaktifkan opsi untuk aplikasi yang kurang aman (saya menggunakan 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("[email protected]")
        mail.[To].Add("[email protected]")
        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

Jadi masuk ke akun Anda dan kemudian pergi ke google.com/settings/security/lesssecureapps

Edgar
sumber
2

Sebuah komentar dari Tomasz Madeyski adalah apa yang memperbaiki masalah saya ... ia mengatakan ada bug di SetDefaultCredential, katanya:

"Masalahnya adalah bahwa dalam setter UseDefaultCredentials ada kode ini: this.transport.Credentials = value? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null; yang mengesampingkan kredensial yang ditetapkan oleh Credentials setter Bagi saya seperti"

jika Anda meletakkan smtpClient.UseDefaultCredentials = falsesetelah menetapkan kredensial ... baris ini disetel ke null kredensial itu ...

FabianSilva
sumber
2

NOVEMBER 2018, sudah mencoba semuanya di atas tanpa hasil.

Di bawah ini adalah solusi yang akhirnya berhasil. Sayangnya ini tidak menggunakan SSL, tetapi berhasil !!!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("[email protected]", "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);
}
InGeek
sumber
1

Saya mencoba semua saran yang ditemukan di sini, dari mengaktifkan aplikasi yang kurang aman, hingga mencoba port 587 ... tidak ada yang berhasil. Akhirnya saya baru saja berkomentar UseDefaultCredentials = false. Semuanya bekerja jika saya tidak menyentuh boolean itu.

Kris Coleman
sumber
1
sama di sini..saya tidak percaya bahwa satu baris membutuhkan waktu satu jam dari saya!
Wahid Masud
0

Saya benar-benar melihat banyak ide, satu-satunya solusi adalah dengan cara ini (bekerja dengan Penyedia email yang berbeda):

            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)...
Walter
sumber
0

Saya adalah aplikasi Google untuk pelanggan bisnis dan saya menghabiskan beberapa jam terakhir hanya berurusan dengan ini, bahkan setelah memiliki semua pengaturan yang benar (smtp, port, enableSSL, dll). Inilah yang bekerja untuk saya dan situs web yang melemparkan kesalahan 5.5.1 ketika mencoba mengirim email:

  1. Masuk ke admin.google.com Anda
  2. Klik SECURITY <- jika ini tidak terlihat, kemudian klik 'MORE CONTROLS', dan tambahkan dari daftar
  3. Klik Pengaturan Dasar
  4. Gulir ke bagian bawah kotak Pengaturan Dasar, klik tautan: 'Buka pengaturan untuk aplikasi yang kurang aman'
  5. Pilih opsi # 3: Menerapkan akses ke aplikasi yang kurang aman untuk semua pengguna (Tidak Disarankan)
  6. Tekan SAVE di bagian bawah jendela

Setelah melakukan ini, formulir email saya dari situs web kembali berfungsi. Semoga berhasil!

RichieMN
sumber
0

Anda mungkin perlu membuat / membuat kata sandi APP tertentu dari gmail. aplikasi atau skrip Anda akan menggunakan kata sandi baru ini alih-alih kata sandi biasa. Kata sandi reguler Anda masih berfungsi dengan baik untuk Anda.

Itulah yang dilakukan untuk saya. Saya masih menggunakan akun email yang sama tetapi harus membuat kata sandi khusus aplikasi baru.

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

Tangkapan layar

Pada dasarnya Anda dapat melakukannya di sini: https://security.google.com/settings/security/apppasswords

samiup
sumber
0

Jika Anda menggunakan gmail.

  • 1-masuk ke akun Anda

    2 - telusuri tautan ini

    3 - Izinkan aplikasi yang kurang aman: AKTIF

Nikmati....

Muhammad Azeem
sumber
0

jangan letakkan break-point sebelum menunggu smtp.SendMailAsync (mail);

:)

ketika menunggu dengan break point memberikan kesalahan ini ketika saya menghapus break point itu berhasil

Hamit YILDIRIM
sumber
-1

Saya menggunakan semua solusi yang disebutkan di atas, tetapi akhirnya berhasil hanya setelah saya mengaktifkan Akses IMAP dari pengaturan Gmail. Tautan ke Aktifkan Akses IMAP di pengaturan gmail

Tentu saja, poin dalam solusi lain juga diperlukan.

AndroidMechanic - Viral Patel
sumber
Ini tidak membantu saya. Mengaktifkan IMAP hanya memungkinkan Anda membaca pesan email Gmail dari klien email lain seperti Outlook, Thunderbird.
kimbaudi
-5

coba ganti tuan rumah, ini yang baru, saya dapat konfigurasi mozilla thunderbird ini

Host = "smtp.googlemail.com"

itu bekerja untuk saya

patogalarzar
sumber