SMTP sunucusu güvenli bir bağlantı gerektiriyor veya istemcinin kimliği doğrulanmadı. Sunucu yanıtı şöyleydi: 5.5.1 Kimlik Doğrulama Gerekli mi?


111

Başvurumdan e-posta göndermek istiyorum ve posta göndermek için aşağıdaki kodu yazdım

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

Bunu localhost'ta çalıştırıyorum, bu yüzden göndermek için ne hata yapıyorum.

Düğme gönderdiğimde şöyle bir hata veriyor

SMTP sunucusu güvenli bir bağlantı gerektiriyor veya istemcinin kimliği doğrulanmadı. Sunucu yanıtı şöyleydi: 5.5.1 Kimlik Doğrulama Gerekli.

Web.config dosyasındaki kod

 <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="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

bu hatayı çözmek ve posta göndermek için ne yapmalıyım?



Sanırım bu yanıta da bakmanız gerekebilir: stackoverflow.com/a/9572958/1136253
mrbengi

Ben de aynı sorunu yaşadım. [bu gönderiyi] kontrol edin [1] [1]: stackoverflow.com/a/20186909/709340
Moslem Hady

Yapılandırma dosyasında SMTP yapılandırma verilerini belirtmeyi ve bir kodda bunların üzerine yazmamayı düşünmelisiniz
systemnetmail.com/faq/4.1.aspx

Yanıtlar:


62

Öncelikle gmail'in güvenlikle ilgili sorunlarını kontrol edin. Gmail'de çift kimlik doğrulamayı etkinleştirmiş olabilirsiniz. Herhangi bir güvenlik uyarısı alıyorsanız, gmail gelen kutunuzu da kontrol edin. Bu gibi durumlarda @mjb'nin diğer yanıtını aşağıdaki gibi kontrol edin

Aşağıda, bu tür sorunlar için her zaman önce kontrol ettiğim çok genel bir şey var

client.UseDefaultCredentials = true;

yanlış olarak ayarlayın.

Not @Joe King'in cevabı - istemciyi ayarlamadan önce client UseDefaultCredentials ayarlamalısınız.


2
Bu durumda kodunuzu paylaşmalısınız. Yukarıdaki cevap, söz konusu kod içindir
Ronak Patel

7
Not @Joe King'in cevabı - istemciyi ayarlamadan önce istemciyi ayarlamalısınız.DefaultCredentials Kullanın. Kimlik Bilgileri
Aaron

1
Bu cevap işe yaramayacak, sanırım çoğu insan gmail tarafında güvenlikle karşı karşıya kaldı. uygun bir çözüm için mjb'nin cevabına bakın
Jerry Liang

2
Ayrıca, "Captcha" nın devre dışı bırakıldığından emin olun - komut dosyasını uzak bir sunucuda çalıştırıyorsanız bu gerekli olabilir (yerel makinede çalıştırırken gerekli değildir): accounts.google.com/DisplayUnlockCaptcha
Jens,

3
Client UseDefaultCredentials = false; client.Credentials'dan önce ve client.EnableSsl = true; benim durumumda hile yaptı.
Yığın

145

Bende de aynı sorun var.

Bu çözümü buldum:

Google, modern güvenlik standartlarını kullanmayan bazı uygulamalardan veya cihazlardan oturum açma girişimlerini engelleyebilir. Bu uygulamalara ve cihazlara izinsiz giriş yapılması daha kolay olduğundan, bunların engellenmesi hesabınızın daha güvenli olmasına yardımcı olur.

En son güvenlik standartlarını desteklemeyen bazı uygulama örnekleri şunlardır:

  • İPhone veya iPad'inizdeki iOS 6 veya daha düşük Mail uygulaması
  • 8.1 sürümünden önceki Windows telefonunuzdaki Mail uygulaması
  • Microsoft Outlook ve Mozilla Thunderbird gibi bazı Masaüstü posta istemcileri

Bu nedenle, google hesabınızda Daha Az Güvenli Oturum Açmayı (veya Daha az güvenli uygulama erişimini ) etkinleştirmeniz gerekir .

Google hesabında oturum açtıktan sonra şu adrese gidin:

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

C # 'da aşağıdaki kodu kullanabilirsiniz:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    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@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Aşağıdaki yorumlar alanında Michael Freidgeim tarafından paylaşılan bilgiler:
Ekran görüntüleri ile benzer cevap https://stackoverflow.com/a/32457468/52277


1
Bu, kodda SSL'nin etkinleştirilmesini sağlamanın yanı sıra harikalar yarattı, çok teşekkürler
Crouch

1
Cevabı paylaştığınız için sizden @mjb. Hayatımı kurtarıyor :)
Mayeed

3
bu seçilen cevap olmalıdır
thatOneGuy

2
Bu benim sorunumdu, bu belayı aştığınız ve daha açıklayıcı bir cevap verdiğiniz için teşekkür ederim.
Bojan

Benim için de çalıştı. Teşekkürler @mjb
Rajbir Jawanda

44

Belirlediğiniz olun SmtpClient.Credentials sonra arayarak SmtpClient.UseDefaultCredentials = false.

Ayar null olarak SmtpClient.UseDefaultCredentials = falsesıfırlanacağı SmtpClient.Credentialsiçin sıra önemlidir .


2
Yarım saattir bunun çözümünü arıyordum, internette bunun siparişinden bahseden tek küçük gönderi seninki. Teşekkürler dostum.

4
@Joe King Sen harikasın ..... 3 saattir bunu arıyordum :)
Jatin

1
Teşekkürler @ Joe King, MS belgelerinde eksik olan hayati bilgiler. Bu, kullanıcı adı ve şifre ile gönderme sorunumun da çözümüydü.
Aaron

1
Bu kolayca gözden kaçabilir ancak az önce öğrendiğim gibi sıralama önemlidir.
GatesReign

1
Evet. günümü kurtardım. Kimlik Bilgilerini ayarlamadan önce UseDefaultCredentials = false çağırmanız gerekir.
Randevu

33

Saatlerce farklı şeyler aradım ve denedim .. Özetlemek gerekirse şu noktaları göz önünde bulundurmam gerekiyordu:

  1. Yerine smtp.gmail.comkullanınsmtp.google.com
  2. 587 numaralı bağlantı noktasını kullanın
  3. client.UseDefaultCredentials = false;Kimlik bilgilerini ayarlamadan önce ayarlayın
  4. Daha az güvenli uygulamalar için Erişimi açın
  5. Ayarlamak client.EnableSsl = true;

Bu adımlar yardımcı olmadıysa, bu yanıtı kontrol edin .
Belki bu System.Net.Mail SSS bölümünde de yararlı bir şeyler bulabilirsiniz .


1
Bu cevap çok faydalı ... sorunumu çözdü. Çok teşekkürler
Hari

1
hala çalışmıyorsa, bu bağlantıya g.co/allowaccess gidin ve erişime izin verin
Portekoi

1
"Daha az güvenli uygulamalara erişim" günümü kurtardı.
Romil Kumar Jain

1
Bu kısım benim için yaptı: "Daha az güvenli uygulamalar için Erişimi açın". Teşekkürler!
Tadej

11

Gmail hesabınıza giriş yapmayı deneyin. gmail SMTP kullanarak e-posta gönderirseniz kilitlenir. Kilitlenmeden önce gönderebileceğiniz e-postaların sınırını bilmiyorum, ancak bir kez oturum açarsanız, koddan tekrar çalışır. webconfig ayarınızın iyi olduğundan emin olun.


Gerçekten en iyi cevap! Tekrar giriş yaptım ve işe yaradı! Not: Google'da bir captcha sağlamam gerekiyordu
Bellash

Google hesabım iki faktörlü kimlik doğrulama ile korunduğu için bu hatayı aldım. E-postayı göndermek için özel bir hesap oluşturdum.
MvdD

8

Bu şekilde deneyin, sadece bazı hafif değişiklikler yaptım:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
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("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Ayrıca, orada posta ayarlarınız varsa, lütfen app.config dosyanızı gösterin.


Henüz içinde yapılandırmadım. oraya ne yazmalıyım?
Abhay Andhariya

mvc uygulamamda app.config dosyası yok.
Abhay Andhariya

Diğer birçok çözümü denedim, ancak yalnızca bu işe yaradı. Teşekkürler
Adil Malik



3

"UseDefaultCredentials" öğesini false olarak ayarlasam bile aynı sorunla karşılaştım. Daha sonra temel nedenin hesabımda "2 Adımlı Doğrulama" yı açmış olmam olduğunu öğrendim. Kapattıktan sonra sorun ortadan kalktı.


4
2 adımlı doğrulamayı kapatmayın. Bir sebebi var. GMail ayarlarında uygulamaya özel bir şifre oluşturabilir ve bunu SmtpClient'te kullanabilirsiniz. Bunu normal bir şifreyi açığa çıkarmaktansa yapmalısınız.
Daniel Dyson

2

görüntü açıklamasını buraya girin Daha az güvenli uygulamaya erişime izin verildiğinden emin olun.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        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("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }

1
"Daha az güvenli uygulamaya erişim" ayarını değiştirme bağlantısı burada - google.com/settings/security/lesssecureapps Ayarı değiştirmek, hatayı
aşmama

1

Aşağıda benim kodum var, ben de aynı hatayı aldım ama sorun şifremi yanlış vermiş olmamdı.Aşağıdaki kod mükemmel çalışacak ...

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            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);

E-posta Gönderme bölümünde buna başvurabilirsiniz


1

Yeni bir google hesabıysa, normal kullanıcı arayüzü üzerinden bir e-posta (ilki) göndermeniz gerekir. Bundan sonra uygulamanızı / robotunuzu mesaj göndermek için kullanabilirsiniz.


1

Yapılandırma dosyasında SMTP yapılandırma verilerini belirtmeyi ve bir kodda bunların üzerine yazmamayı düşünmelisiniz - http://www.systemnetmail.com/faq/4.1.aspx adresindeki SMTP yapılandırma verilerine bakın.

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>



0

Bazı smtp sunucuları (güvenli olanlar), hem kullanıcı adı hem de e-posta sağlamanızı gerektirir; eğer gmail, büyük olasılıkla ele almanız gereken 'Daha Az Güvenli Oturum Açma' sorunudur, aksi takdirde deneyebilirsiniz:

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

gelen e-postanın ve kullanıcı adının, kendilerine aynı şekilde atıfta bulunan bazı uygulamalardan farklı olarak farklı olduğuna dikkat edin.

bu yöntemi çağırmak şu şekilde yapılabilir:

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

0

Daha az güvenli seçeneği açtıktan ve diğer çözümleri denedikten sonra , hala aynı sorunla karşılaşıyorsanız, bu aşırı yüklemeyi kullanmayı deneyin:

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

onun yerine:

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

0

Bugün sabah bir Microsoft 365 Geliştirici aboneliği (E5) oluşturdum ve aşağıdaki ayarları kullanarak bir test e-postası göndermek için kullandım

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

Bu kod tarafından atılan istisna ile bu hata mesajını almaya devam ettiğim için başlangıçta işe yaramadı. Ardından, sorunu çözmek için Microsoft 365 yönetim merkezi ayarlarıyla oynayarak ve makaleler okuyarak yaklaşık 4 saatten fazla harcadım. Sonunda Microsoft 365 yönetim merkezi parolamı değiştirdim ve bir cazibe gibi çalıştı. Bu nedenle, herhangi bir gelişmiş çözümü düşünmeden önce, bu mesajı aldığınızda şifreyi değiştirmeyi denemeye değer.

Microsoft 365 hesabımda herhangi bir sorun olmadan oturum açtığım için parolanın kesinlikle geçersiz olmadığını unutmayın. ancak şifre değişikliği sorunu çözdü.


-1

Ayrıca 'SMTP sunucusu güvenli bir bağlantı gerektiriyor veya istemcinin kimliği doğrulanmadı. Sunucu yanıtı şöyleydi: 5.5.0 Kimlik Doğrulaması Gerekli 'daha sonra çok fazla internet materyalinden geçti ancak bana tam olarak yardımcı olmadı. Nasıl çözdüm

1. adım: smtp.gmail.com bir gmail sunucusudur, bu nedenle hesabınızın gmail ayarlarına gidin -> tüm ayarları gör'e tıklayın -> Yönlendirme ve IMAP / POP-> pop ve imap'i kontrol edin, eğer etkinleştirilmemişse -> Değişiklikleri kaydet. 2. adımda gmail profil resminize tıklayın -> google hesabınızı yönetin -> güvenlik sekmesine gidin -> daha az güvenli uygulamalara erişimi kontrol edin (bu seçenek iki adımlı doğrulamayı seçmediyseniz kullanılabilir) -> varsayılan olarak google bunu devre dışı bırakacak, e-posta göndermek için çalışan gerçek gmail şifrenizi kullanmayı etkinleştirecek. not: -Daha az güvenli uygulamalar için gmail erişimini etkinleştirmek sizin için tehlikeli olabilir, bu yüzden bunu önermiyorum

step3: -hesabınızda iki adımlı doğrulama etkinleştirilmişse veya uygulamaya özel şifre kullanarak gmail Gerçek şifreniz dışında bir şifre kullanmak istiyorsanız, şunu deneyin: - gmail profil resminize tıklayın-> Google hesabınızı yönetin-> güvenliğe git seçeneğine tıklayın sekmesi-> UYGULAMA ŞİFRESİ arayın -> verilen herhangi bir uygulama adını seçin -> herhangi bir cihaz adı seçin -> oluştur'a tıklayın -> 16 basamaklı şifreyi kopyalayın ve yerine bir gmail şifresi girmeniz gereken uygulamanıza yapıştırın gerçek gmail şifreniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.