Saya menggunakan SmtpClient
perpustakaan untuk mengirim email menggunakan berikut ini:
SmtpClient client = new SmtpClient();
client.Host = "hostname";
client.Port = 465;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new NetworkCredential("User", "Pass);
client.Send("from@hostname", "to@hostname", "Subject", "Body");
Kode berfungsi dengan baik di lingkungan pengujian saya, tetapi ketika saya menggunakan server SMTP produksi, kode gagal dengan SmtpException
"Kegagalan pengiriman email." dengan bagian dalam IOException
"Tidak dapat membaca data dari koneksi transport: net_io_connectionclosed".
Saya telah mengonfirmasi bahwa firewall tidak menjadi masalah. Port terbuka dengan baik antara klien dan server. Saya tidak yakin apa lagi yang bisa menyebabkan kesalahan ini.
Ubah port dari 465 menjadi 587 dan itu akan berfungsi.
sumber
Bagi siapa saja yang menemukan posting ini mencari solusi dan Anda telah menyiapkan sendgrid SMTP melalui Azure.
Nama pengguna bukanlah nama pengguna yang Anda siapkan ketika Anda telah membuat objek sendgrid dengan warna azure. Untuk menemukan nama pengguna Anda;
Semoga ini membantu!
sumber
Anda mungkin juga harus mengubah setelan "aplikasi kurang aman" di akun Gmail Anda. EnableSsl, gunakan port 587 dan aktifkan "aplikasi kurang aman". Jika Anda mencari di google bagian aplikasi yang kurang aman, ada halaman bantuan google yang akan menautkan Anda langsung ke halaman akun Anda. Itu adalah masalah saya tetapi semuanya berfungsi sekarang berkat semua jawaban di atas.
sumber
Saya sudah mencoba semua jawaban di atas tetapi masih mendapatkan kesalahan ini dengan akun Office 365. Kode tersebut tampaknya berfungsi dengan baik dengan akun Google dan smtp.gmail.com saat mengizinkan aplikasi yang kurang aman.
Ada saran lain yang bisa saya coba?
Ini kode yang saya gunakan
PERBARUI DAN BAGAIMANA SAYA MENYELESAIKANNYA:
Mengatasi masalah dengan mengubah Klien Smtp ke Mailkit. Klien Smtp System.Net.Mail sekarang tidak disarankan untuk digunakan oleh Microsoft karena masalah keamanan dan Anda seharusnya menggunakan MailKit. Menggunakan Mailkit memberi saya pesan kesalahan yang lebih jelas sehingga saya dapat memahami menemukan akar penyebab masalah (masalah lisensi). Anda bisa mendapatkan Mailkit dengan mendownloadnya sebagai Paket Nuget .
Baca dokumentasi tentang Klien Smtp untuk informasi lebih lanjut: https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
Berikut adalah cara saya mengimplementasikan SmtpClient dengan MailKit
sumber
Apakah perpustakaan SMTP Anda mendukung koneksi terenkripsi? Server email mungkin mengharapkan koneksi TLS yang aman dan karenanya menutup koneksi jika tidak ada handshake TLS
sumber
SmtpClient
pustaka .NET default , itu mendukung encrytpion, server memang memerlukan enkripsi, dan saya telah mengaturnyaclient.EnableSssl = true;
. Meskipun saya pikir saya akan melanjutkan ini sedikit lebih jauh dengan Wireshark.Jika Anda menggunakan server SMTP pada kotak yang sama dan SMTP Anda terikat ke alamat IP, bukan "Any Assigned", ini mungkin gagal karena mencoba menggunakan alamat IP (seperti 127.0.0.1) yang saat ini tidak berfungsi SMTP di.
sumber
Untuk meningkatkan apa yang disebut jocull dalam komentar, saya melakukan semua yang disebutkan di utas ini dan menyerang ... karena milik saya berada dalam satu lingkaran untuk dilindas berulang-ulang; setelah pertama kali melalui loop, terkadang gagal. Selalu bekerja pertama kali melalui loop.
Untuk memperjelas: loop menyertakan pembuatan SmtpClient, dan kemudian melakukan .Send dengan data yang benar. SmtpClient dibuat di dalam blok coba / tangkap, untuk menangkap kesalahan dan untuk memastikan objek dihancurkan sebelum bagian bawah loop.
Dalam kasus saya, solusinya adalah memastikan bahwa SmtpClient dibuang setelah setiap kali dalam loop (baik melalui menggunakan () pernyataan atau dengan melakukan pembuangan manual). Bahkan jika objek SmtpClient secara implisit dihancurkan dalam loop, .NET tampaknya membiarkan hal-hal yang ada di sekitar untuk konflik dengan upaya berikutnya.
sumber
Ubah nomor port Anda menjadi 587 dari 465
sumber
menghapus
sepertinya menyelesaikannya untuk saya.
sumber
Dalam kasus saya, pelanggan lupa menambahkan alamat IP baru di pengaturan SMTP mereka. Buka IIS 6.0 di server yang menyiapkan smtp, klik kanan server virtual Smtp, pilih Properties, tab Access, klik Connections, tambahkan alamat IP dari server baru. Kemudian klik Relay, tambahkan juga alamat IP server baru. Ini memecahkan masalah saya.
sumber
Coba ini: Berikut adalah kode yang saya gunakan untuk mengirim email ke banyak pengguna.
sumber
SmtpClient
juga Disposable, jadi harus dibungkus denganusing
blokJika semua solusi di atas tidak berfungsi untuk Anda, coba perbarui file berikut ke server Anda (dengan mempublikasikan maksud saya, dan build sebelumnya akan membantu).
Setelah memperbarui Anda akan melihat kesalahan ini. karena saya telah menyelesaikannya dengan solusi ini.
sumber
Untuk Outlook, gunakan pengaturan berikut yang tidak memberikan kesalahan kepada saya
Nama server SMTP smtp-mail.outlook.com
Port SMTP 587
sumber
Kesalahan ini sangat umum. Hal ini dapat disebabkan oleh berbagai alasan seperti server email salah. Beberapa perusahaan hosting menggunakan format mail.domainname. Jika Anda hanya menggunakan nama domain itu tidak akan berhasil. periksa kredensial nama host kata sandi nama pengguna jika perlu Periksa dengan perusahaan hosting.
sumber
Dalam kasus saya, IP server web diblokir di server email, itu perlu dibatalkan pemblokirannya oleh perusahaan hosting Anda dan membuatnya masuk daftar putih. Selain itu, gunakan porta 587.
sumber
Jika server email Anda adalah Gmail (smtp.google.com), Anda akan mendapatkan kesalahan ini ketika Anda mencapai batas pesan. Gmail mengizinkan pengiriman melalui SMTP hingga hanya 2000 pesan per 24 jam.
sumber
Saya mengalami ini saat menggunakan smtp.office365.com, menggunakan port 587 dengan SSL. Saya dapat masuk ke akun menggunakan portal.office.com dan saya dapat mengonfirmasi bahwa akun tersebut memiliki lisensi. Tetapi ketika saya mengaktifkan kode untuk mengirim email, saya terus mendapatkan kesalahan net_io_connectionclosed.
Butuh beberapa waktu untuk mengetahuinya, tetapi admin Exchange menemukan pelakunya. Kami menggunakan O365 tetapi server Exchange berada dalam lingkungan hybrid. Meskipun akun yang kami coba gunakan telah disinkronkan ke Azure AD dan memiliki lisensi O365 yang valid, untuk beberapa alasan kotak surat masih berada di server Exchange hibrid - bukan Exchange online. Setelah pertukaran admin menggunakan perintah "Pindahkan-Kotak Surat" untuk memindahkan kotak surat dari server pertukaran hibrid ke O365, kita dapat menggunakan kode tersebut untuk mengirim email menggunakan o365.
sumber
Siapkan: 1. HostA adalah server virtual SMTP dengan port default 25 2. HostB adalah workstation tempat saya mengirim email dengan SmtpClient dan mensimulasikan jaringan tidak stabil yang saya gunakan kikuk
Kasus 1 Diberikan Jika HostB adalah 2008R2 Ketika saya mengirim email. Kemudian masalah ini terjadi.
Kasus 2 Diberikan Jika HostB adalah 2012 atau versi yang lebih tinggi Ketika saya mengirim email. Kemudian surat itu dikirim.
Kesimpulan: Akar masalah ini terkait dengan Windows Server 2008R2.
sumber