C # ile Gmail SMTP sunucusu üzerinden e-posta gönderme


243

Nedense ne kabul edilen cevap ne de diğerleri benim için " Gmail üzerinden .NET'te e-posta gönderme " için işe yaramıyor . Neden işe yaramazlar?

GÜNCELLEME: Diğer sorudaki tüm cevapları (kabul edilmiş ve başka türlü) denedim, ama hiçbiri işe yaramıyor.

Sadece başka biri için işe yarayıp yaramadığını bilmek istiyorum, aksi takdirde Google bir şey değiştirmiş olabilir (daha önce olmuştu).

Kullanan kod parçasını denediğimde, SmtpDeliveryMethod.Networkhızla Gönder (ileti) üzerinde bir SmtpException alıyorum. Mesaj

SMTP sunucusu güvenli bir bağlantı gerektiriyor veya istemcinin kimliği doğrulanmadı.

Sunucu yanıtı şuydu:

5.5.1 Kimlik Doğrulaması Gerekiyor. Daha fazla bilgi edinin "<- cidden, orada biter.

GÜNCELLEME:

Bu, uzun zaman önce sorduğum bir soru ve kabul edilen cevap, farklı projelerde birçok kez kullandığım kod.

Codeplex'te bir EmailSender projesi oluşturmak için bu yayındaki ve diğer EmailSender projelerindeki bazı fikirleri aldım . Test edilebilirlik için tasarlanmıştır ve GoDaddy ve Gmail gibi favori SMTP hizmetlerimi destekler.


Bunu farklı bir dilde benzer yöntemler kullanarak yapmaya çalıştım. Aynı şeyle karşılaştım: Daha önce işe yarayan eski belgelenmiş yöntemler benim için işe yaramadı. Yani Google'ın bir şey değiştirip değiştirmediğini veya yanlış bir şey yapıp yapmadığınızı merak ediyorsunuz.
AaronLS

3
@aaronls son değişiklik 465 bağlantı noktası ile ilgili gibi görünüyor. Bir çözüm ararken denedim (sadece aynı şekilde çalışıyordum) ve 465 port zaman aşımı her zaman. Durum buysa, 587 bağlantı noktasını deneyin.
eglasius 02

2
Bu sorun, "sözcük doğrulaması" (captcha) nedeniyledir. Web arayüzü üzerinden elle oturum açar ve captcha'yı doldurursanız SMTP'niz çalışmaya başlar.
Robert Koritnik

4
FWIW, benim için çalışıyor. 587 ve .EnableSSL true değerlerini kullanmanız gerekir. c # 4 / .NET 4 şu anda alternatif 465 / SSL'yi desteklememektedir. gmail, diğer posta istemcilerini yapılandırma konusunda talepte bulunur .
gerryLowry

1
@Eglasius yanıtını izleyin ve Gmail'in hesabınızın kimliğini doğrulamasına izin vermek için Gmail'deki "Daha Az Güvenli Uygulamalara İzin Ver" ayarını açtığınızdan emin olun.
user2713706

Yanıtlar:


291

CVertex, kodunuzu gözden geçirdiğinizden emin olun ve eğer bir şey açığa vurmuyorsa, gönderin. Sadece üzerinde çalıştığım bir test ASP.NET sitesinde etkinleştiriyordum ve çalışıyor.

Aslında, bir noktada kodumla ilgili bir sorunum vardı. Bir konsol programında daha basit bir sürümü olana ve çalıştığını görünceye kadar fark etmedim (endişelendiğiniz gibi Gmail tarafında değişiklik yok). Aşağıdaki kod, bahsettiğiniz örnekler gibi çalışır:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential("myusername@gmail.com", "mypwd"),
                EnableSsl = true
            };
            client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
            Console.WriteLine("Sent");
            Console.ReadLine();
        }
    }
}

Ayrıca web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx ve kodun bir kombinasyonunu kullanarak çalıştım (çünkü EnableSslyapılandırma dosyasında eşleşme yok :().


1
Bir C # winforms uygulamasında benim için zekice çalıştı. Teşekkürler, Freddy.
Andrew

13
Bunun gibi kodun gmail kimlik bilgilerinizi düz metin olarak etkili bir şekilde kullanıcıya aktardığını unutmayın ...
Chris Marisic

3
aslında web.config dosyasında enableSsl ile eşleşen bir ayar vardır, aşağıdaki cevaba bakınız
Wiebe Tijsma

4
@ Zidad, 4.0'a eklendi.
eglasius

21
Gmail ayarları sayfanızda "daha az güvenli uygulamalar" için erişimi etkinleştirmeniz de gerekebilir: google.com/settings/security/lesssecureapps . "Sunucu yanıtı şuydu: 5.5.1 Kimlik Doğrulaması Gerekli.
Ravendarksky

74

AŞAĞIDAKİ TÜM BAŞKA BAŞARILARSA, SİZİN SORUNUZA CEVAP OLACAKTIR :

Aynı hatayı aldım, Google'ın yeni şifre mukavemet ölçüm algoritması, mevcut şifremi çok zayıf olarak görerek değişti ve bana bir şey söylemedi (bir mesaj veya uyarı bile değil) ... Bunu nasıl keşfettim? ? Eh, yardımcı olacağını görmek için şifremi değiştirmeyi seçtim (boşuna hiçbir şey denemedim) ve şifremi değiştirdiğimde işe yaradı!

Sonra, bir deneme için, ne olacağını görmek için şifremi önceki şifreme değiştirmeye çalıştım ve Gmail bunu yapmama izin vermedi, "üzgünüm bu değişikliği seçtiğiniz gibi kaydetmenize izin veremeyiz şifre çok zayıf "ve eski şifreme geri dönmeme izin vermedi. Bunun hata yaptığını anladım çünkü a) her x ayda bir şifrenizi değiştirmeniz veya b). Daha önce de söylediğim gibi, şifre gücü algoritmaları değişti ve bu yüzden herhangi bir yere giriş yapmaya çalışırken bu konuda hiçbir şey söylememelerine rağmen zayıf şifre kabul edilmedi! Bu (2 numaralı) en olası senaryodur, çünkü zayıf şifrem yaklaşık 4 aylıktı ve Gmail'de kullanmama izin verdi.

Bu konuda hiçbir şey söylemedikleri oldukça kötü, ama mantıklı. Ele geçirilen e-postaların çoğu gmail dışındaki yazılımları kullanarak oturum açtığından ve Gmail’i Gmail ortamının dışında kullanmak istiyorsanız daha güçlü bir parolanızın olması gerektiğini tahmin ediyorum.

Umarım bu yardımcı olur!


2
Teşekkürler, dediğiniz gibi güçlü ve her şey iyi çalışır böylece şifre değiştirin.
Gavin

1
Bu tam olarak benim sorunumdu - diğer tüm öneriler config ile ilgili, ama benim yapılandırma baştan doğruydu, ama hatayı almaya devam ettim. Şifreyi değiştirmek her şeyi değiştirdi,
André Vermeulen

Teşekkürler, nihayet bu sorunu çözebildim, Davam daha da karmaşıktı, geliştirici makinemden (Gürcistan, Kafkasya'da) e-posta gönderebildim, ancak e-postalar üretim sunucularından başarısız oldu (İngiltere) karmaşık bir parola değiştirme şimdi her şey çalışıyor :)
Kirill Chilingarashvili

Teşekkürler. Gmail hesabımla aynı parola gücüne sahip değildim. Güçlü olanla güncelledim ve kodlarım çalışıyor.
Thomas.Benz

Teşekkürler, Evet sonunda şifreyi güçlü bir şifre ile değiştirin.
Misha Beskin

68

Yukarıdaki diğer sorun giderme adımlarına ek olarak, GMail hesabınızda iki faktörlü kimlik doğrulamayı ( iki adımlı doğrulama olarak da bilinir) etkinleştirdiyseniz , uygulamaya özel bir şifre oluşturmanız ve bunu yeni kullanmanız gerektiğini de eklemek isterim. SMTP aracılığıyla kimlik doğrulaması yapmak için oluşturulan şifre .

Bir tane oluşturmak için şu adresi ziyaret edin: https://www.google.com/settings/ ve şifreyi oluşturmak için Uygulamalara ve sitelere yetki verme'yi seçin .


1
2 adımlı doğrulamayı etkinleştirmedim ve şifreyi ne kadar güvenli yaptığım önemli değildi, bu benim sorunumu çözmenin tek yoluydu. Diğer gmail hesaplarını 2 adımlı ve zayıf parolalar olmadan sorunsuz bir şekilde kullanabildim ... gerçekten kullanmak istediğim hesabı kullanmak için 2 adımı etkinleştirip uygulamaya özel bir parola kullanmak zorunda kaldım.
Ian Robertson

Tam olarak ne yapıyorum ama yine de aynı hata: - / Şifremin yeterince güçlü olmadığı gibi davranıyor, ancak Gmail'in bana verdiği uygulama şifresini kullanıyorum !!!
Jerry Dodge

55
Turn On Access For Less Secure Apps and it will work for all no need to change password.

Gmail Ayarına bağlantı

resim açıklamasını buraya girin


1
Bu benim için çalıştı. Dahası, yukarıdaki şekilde e-posta göndermeye çalıştığımda, aslında Google'dan e-posta aldım, burada bu girişimi daha az güvenli uygulamadan engellediklerini söylediler ve bunu düzeltmek için bu yoldan bahsettiler
Demarsch

1
Diğer tüm ayarları yaptığımdan beri bilmeceğin en önemli anahtarı bu ve çalışmıyor gibi görünüyordu. En kısa sürede bu ayarı vardı, sadece bir cazibe gibi çalıştı.
Kayıp

1
Bu benim için çalıştı. Uygulama Şifresi + SSL + Ağ Kimlik Bilgileri. (VB.NET)
CrazyIvan1974

30

Yukarıda belirtilen durumlardan birkaçı nedeniyle, gmail hesabımdan e-posta gönderirken bazı sorunlar yaşadım. İşte nasıl çalıştığını ve aynı zamanda esnek tutmanın bir özeti:

  • Her şeyden önce GMail hesabınızı kurun:
    • IMAP erişimini etkinleştirin ve doğru maksimum sayıda ileti olduğunu iddia edin (buradan yapabilirsiniz)
    • Şifrenizin en az 7 karakterden ve güçlü olduğundan emin olun (Google'a göre)
    • Önce bir captcha kodu girmenize gerek olmadığından emin olun. Bunu tarayıcınızdan bir test e-postası göndererek yapabilirsiniz.
  • Web.config'de değişiklik yapın (veya app.config, henüz denemedim, ancak bir Windows uygulamasında çalışmasını sağlamak kadar kolay olduğunu düşünüyorum):
<configuration>
    <appSettings>
        <add key="EnableSSLOnMail" value="True"/>   
    </appSettings>

    <!-- other settings --> 

    ...

    <!-- system.net settings -->
    <system.net>
        <mailSettings>
            <smtp from="yourusername@gmail.com" deliveryMethod="Network">
                <network 
                    defaultCredentials="false" 
                    host="smtp.gmail.com" 
                    port="587" 
                    password="stR0ngPassW0rd" 
                    userName="yourusername@gmail.com"
                    />
                <!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
            </smtp>
        </mailSettings>
    </system.net>
</configuration>
Add a Class to your project:

Imports System.Net.Mail

Public Class SSLMail

    Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)

        GetSmtpClient.Send(e.Message)

        'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too:
        e.Cancel = True

    End Sub

    Public Shared Sub SendMail(ByVal Msg As MailMessage)
        GetSmtpClient.Send(Msg)
    End Sub

    Public Shared Function GetSmtpClient() As SmtpClient

        Dim smtp As New Net.Mail.SmtpClient
        'Read EnableSSL setting from web.config
        smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail"))
        Return smtp
    End Function

End Class

Ve şimdi e-posta göndermek istediğinizde yapmanız gereken tek şey SSLMail.SendMail:

ör. PasswordRecovery kontrolüne sahip bir Sayfada:

Partial Class RecoverPassword
Inherits System.Web.UI.Page

Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail
    e.Message.Bcc.Add("webmaster@example.com")
    SSLMail.SendMail(e)
End Sub

End Class

Veya kodunuzdaki herhangi bir yeri arayabilirsiniz:

SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"})

Umarım bu yazıya giren herkese yardımcı olur! (VB.NET kullandım, ancak herhangi bir .NET diline dönüştürmenin önemsiz olduğunu düşünüyorum.)


+1 "enableSsl =" true "- Bu, derlemeleri yeniden derlemeden Smtp.enableSsl özelliğini özel olarak ayarlamayan eski bir uygulama için çalışır. Mükemmel ipucu!
Metro Şirin,

ve güvenlik duvarını unutmayın. Port 587, açılması normal bir port değildir.
Guy Lowe

13
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername@gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername@gmail.com","yourusername@gmail.com","test","testbody")

Gibi bir hata alırsanız "SMTP sunucusu güvenli bir bağlantı gerektiriyor veya istemci kimlik doğrulaması değildi sunucu yanıt oldu:. 5.5.1 Kimlik Doğrulaması Gerekli Daha fazla bilgi edinin" Ben bundan önce olsun emin olun hat SMTPClientObj.UseDefaultCredentials = Falsedahil edildi ve bu hat önce olmalıdır SMTPClientObj.Credentials.

Ben bu 2 satır ters şekilde geçiş yaptım ve 5.5.1 Kimlik Doğrulama Gerekli hata döndürdü.


Bana tam olarak böyle oldu. Kim özellik ayarlama düzeni düzeltmek / şeyler kırmak düşündüm!
Bill Yang

Benim için de sorun buydu, önerildiği gibi düzeni değiştirdim ve iyi çalışıyor - baş ağrısı, ugh!
eth0

13

Oh ... İnanılmaz ... İlk olarak herhangi bir nedenle e-posta gönderemedim. Ama bu iki satırın sırasını aşağıdaki gibi değiştirdikten sonra, mükemmel çalışıyor.

//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");

Umarım bu yardım !!! :)


1
Evet, sipariş fark yaratır. Özellikle Kimlik Bilgileri özelliğini ayarladığınızda ve varsayılan kimlik bilgilerini kullanmak istemediğinizde.
Stefan Cvetanovski

1
Belgelere göre, Kimlik Bilgilerini kullanmak için UseDefaultCredentials = false ayarlamanız gerekir. Ancak bu iki ortam gizlice iç içe geçmiş gibi görünmektedir. UseDefaultCredentials öğesini true veya false olarak ayarlarsanız, Credentials değerini null olarak ayarlamanın yan etkisi olur. Ve Kimlik Bilgileri ayarı yan etki ayarlayabilir Set UseDefaultCredentials = false olarak görünür. Ancak bunu belgelemek değil, böcek ya da sadece topal bir geliştirici olabilir.
Aaron

10

Sorun, gmail yoluyla göndermek için teknik bir yetenek değil. Çoğu durumda işe yarar. Bir makineyi gönderemezseniz, bunun nedeni genellikle makinenin en az bir kez kontrollerde bir insanla kimliği doğrulanmamış olmasıdır.

Çoğu kullanıcının karşılaştığı sorun, Google'ın giden sınırları her zaman değiştirmeye karar vermesidir. Çözümünüze daima savunma kodu eklemelisiniz. Hataları görmeye başlarsanız, gönderme hızınızı azaltın ve bir süre göndermeyi bırakın. Google'ı göndermeye devam ederseniz, tekrar göndermeden önce bazen gecikme sürenize fazladan zaman ekler.

Mevcut sistemimde yaptığım her mesaj arasında 1,5 saniyelik bir gecikmeyle göndermek. Sonra herhangi bir hata alırsam, 5 dakika durun ve tekrar başlayın. Bu genellikle işe yarar ve hesabın sınırlarına kadar göndermenize izin verir (son kontrol ettiğimde, günlük müşteri girişleri için 2.000 idi).


1
Bu benim sorunumdu! Production'a konuşlandırdığımda, sorunu aldım ve sunucunun kendisinde Gmail'e giriş yaptıktan sonra tekrar çalışmaya başlıyor.
Thisguy


9

Aynı sorunu yaşadım, ancak virüs korumamın giden "spam" e-postalarını engellediği ortaya çıktı. Bunu kapatmak, GMail aracılığıyla SMTP e-postası göndermek için 587 numaralı bağlantı noktasını kullanmama izin verdi


Windows Defender'ı devre dışı bıraktım ve çalışmaya da başladı.
MorioBoncz

9

Burada sizin için başka hiçbir şey işe yaramadıysa, üçüncü taraf uygulamalarından gmail hesabınıza erişmenize izin vermeniz gerekebilir. Bu benim sorunumdu. Erişime izin vermek için aşağıdakileri yapın:

  1. Gmail hesabınızda oturum açın.
  2. Bu sayfayı ziyaret edin https://accounts.google.com/DisplayUnlockCaptcha ve erişime izin vermek için düğmeyi tıklayın.
  3. Https://www.google.com/settings/security/lesssecureapps Bu sayfayı ziyaret edin ve daha az güvenli uygulamalar için erişimi etkinleştirin.

Bu benim için çalıştı umarım başka biri için çalışıyor!


8

Bunun için hangi .NET sürümünün gerekli olduğundan emin değilim çünkü eglasius eşleşen bir enableSslayar olmadığından bahsetti (.NET 4.0 kullanıyorum, ancak .NET 2.0 veya sonraki sürümlerde çalıştığından şüpheleniyorum), ancak bu yapılandırma me (ve herhangi bir programlı yapılandırma kullanmanızı gerektirmez):

<system.net>
  <mailSettings>
    <smtp from="myusername@gmail.com" deliveryMethod="Network">
      <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="myusername@gmail.com"/>
    </smtp>
  </mailSettings>
</system.net>

Önce Gmail hesabınızda POP veya IMAP erişimini etkinleştirmeniz gerekebilir: https://mail.google.com/mail/?shva=1#settings/fwdandpop

Önce normal bir posta istemcisi ile denemenizi tavsiye ederim ...


2
bu 4.0 için yeni sürümleri karşılaştırın -> msdn.microsoft.com/en-us/library/ms164242(v=VS.90).aspx
eglasius

Merhaba Eglasius ... Tamam, bunun için teşekkürler! 4.0 öncesi sadece programatik yaklaşıma sahip oldukları garip. Sanırım hepimiz bir şeyleri unutuyoruz :)
Wiebe Tijsma

6

@Andres Pompiglio: Evet, en azından bir kez şifrenizi değiştirmeniz gerekir. Bu kodlar iyi çalışır:

//Satrt Send Email Function
public string SendMail(string toList, string from, string ccList,
    string subject, string body)
{

    MailMessage message = new MailMessage();
    SmtpClient smtpClient = new SmtpClient();
    string msg = string.Empty;
    try
    {
        MailAddress fromAddress = new MailAddress(from);
        message.From = fromAddress;
        message.To.Add(toList);
        if (ccList != null && ccList != string.Empty)
            message.CC.Add(ccList);
        message.Subject = subject;
        message.IsBodyHtml = true;
        message.Body = body;
        // We use gmail as our smtp client
        smtpClient.Host = "smtp.gmail.com";   
        smtpClient.Port = 587;
        smtpClient.EnableSsl = true;
        smtpClient.UseDefaultCredentials = true;
        smtpClient.Credentials = new System.Net.NetworkCredential(
            "Your Gmail User Name", "Your Gmail Password");

        smtpClient.Send(message);
        msg = "Successful<BR>";
    }
    catch (Exception ex)
    {
        msg = ex.Message;
    }
    return msg;
}
//End Send Email Function

VE fonksiyonunu kullanarak şunları yapabilirsiniz:

Response.Write(SendMail(recipient Address, "UserName@gmail.com", "ccList if any", "subject", "body"))

SMTP sunucusu güvenli bir bağlantı gerektiriyor veya istemcinin kimliği doğrulanmadı. Sunucu yanıtı şuydu: 5.5.1 Kimlik Doğrulaması Gerekli.
Savas Adar

6

Kurumsal VPN bağlantısı kullanıyordum. Uygulamamdan e-posta gönderememin nedeni buydu. VPN bağlantısını kesersem çalışır.


5

Ayrıca, oturum açmak için kullandığım hesabın bir nedenle Google tarafından devre dışı bırakıldığını gördüm. Parolamı (eskisi gibi) sıfırladıktan sonra, e-postaları iyi gönderebildim. 5.5.1 mesaj da alıyordum.


5

Ayrıca birçok çözümü denedim ama işe yarayacak bazı değişiklikler yaptım

host = smtp.gmail.com
port = 587
username = email@gmail.com
password = password
enabledssl = true

smtpclient ile yukarıdaki parametreler gmail'de çalışır


5

Aynı hatayı alıyordum ve yukarıdaki çözümlerin hiçbiri yardımcı olmadı.

Benim sorunum gmail hesabına giriş yapmak için hiç kullanılmamış bir uzak sunucudan kod çalıştırıyordu oldu.

Uzak sunucuda bir tarayıcı açtım ve oradan gmail'de oturum açtım. Bu yeni bir yer olduğu için benim olduğumu doğrulamak için bir güvenlik sorusu sordu. Güvenlik kontrolünü yaptıktan sonra kod aracılığıyla kimlik doğrulaması yapabildim.



4

Aynı hatayla karşılaştım ( "SMTP sunucusu güvenli bir bağlantı gerektiriyor veya istemcinin kimliği doğrulanmadı. Sunucu yanıtı şuydu: 5.5.1 Kimlik Doğrulaması Gerekiyor. Daha fazla bilgi edinin" ) ve yanlış şifreyi kullandığımı öğrendim. Giriş bilgilerini düzelttim ve doğru bir şekilde gönderildi.

Bunun geç olduğunu biliyorum, ama belki bu başka birine yardımcı olacaktır.


4

Bulduğum başka bir şey, şifrenizi en az bir kez değiştirmeniz gerektiğidir. Güvenli düzeyli bir şifre kullanmayı deneyin (şifre, 123456 vb. İle aynı kullanıcıyı kullanmayın)


4

Yine sizin için bir başka olası çözüm. IMAP üzerinden Gmail'e bağlanırken benzer sorunlar yaşıyordum. Burada ve başka bir yerde SO üzerinde okuyacağınız, karşılaştığım tüm çözümleri denedikten sonra (ör. IMAP erişimini etkinleştirin, https://accounts.google.com/b/0/displayunlockcaptcha ve vb.), bir kez daha yeni bir gmail hesabı oluşturdum.

Oluşturduğum ilk gmail hesabı olan orijinal testimde, ana gmail hesabıma bağlanmıştım. Bu, yanlış hesaba google tarafından atıfta bulunduğu düzensiz davranışlarla sonuçlandı. Örneğin, https://accounts.google.com/b/0/displayunlockcaptcha çalıştırmak , bu amaçla oluşturduğum hesap yerine ana hesabımı açtı.

Bu nedenle, yeni bir hesap oluşturduğumda ve ana hesabıma bağlamadığımda, yukarıdaki gibi tüm uygun adımları uyguladıktan sonra, düzgün çalıştığını buldum!

Henüz bunu teyit etmedim (yani çoğaltılmış), ama görünüşe göre benim için yaptı ... umarım yardımcı olur.


4
  1. Öncelikle gmail hesabı ayarınızı kontrol edin ve "Daha az güvenli uygulamalar için erişim" ten açın resim açıklamasını buraya girin

Hesabınıza erişmek için Gmail gibi güvenli bir uygulama kullanmanızı önemle öneririz. Google tarafından yapılan tüm uygulamalar bu güvenlik standartlarını karşılamaktadır. Öte yandan, daha az güvenli bir uygulama kullanmak hesabınızı savunmasız bırakabilir. Daha fazla bilgi edin.

  1. Ayarlamak

    smtp.UseDefaultCredentials = false;

    önce

    smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);

4

Bu hatanın bir veya daha fazla nedeni vardır.

  • Yerel sisteminizde Gmail (veya varsa) ile giriş yapın.

  • Ayrıca Daha Az Güvenli Uygulama'yı kontrol edin ve "Aç" olarak ayarlayın GMAIL Bağlantısı. https://www.google.com/settings/security/lesssecureapps

  • E-posta kodunuzda EnableSsl öğesini kontrol edin ve ayrıca true olarak ayarlayın.

    smtp.EnableSsl = true;
  • Ayrıca şu anda hangi bağlantı noktasını kullandığınızı kontrol edin. 25 Global, ancak 587 gibi diğerleri için de kontrol edebilirsiniz. Buradan kontrol edin. Tüm SMTP iletişimi 25'in üzerinde mi gerçekleşiyor?

  • UZAKTAN ÇIKIYORSANIZ : Yukarıdaki Vlad Tamas'ın cevabını kontrol edin .


daha az güvenli uygulama ayarlarını açmak istemezsem, diğer e-posta istemcileri bunu nasıl yapar, neden c # ile aynı şeyi yapamam?
user734028

3

Bağlantı noktası 465 aracılığıyla da bağlanabilirsiniz, ancak System.Net.Mail ad alanının bazı sınırlamaları nedeniyle kodunuzu değiştirmeniz gerekebilir. Bunun nedeni, ad alanının örtük SSL bağlantıları yapma olanağı sunmamasıdır. Bu tartışılıyor http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx adresinde ve I CDO'nun (Ortak Veri Nesnesi) başka bir tartışmada nasıl kullanılacağına dair bir örnek verdik ( tüm bağlantı noktalarında GM # üzerinden C # .Net hataları ).


3

Bu sorunu çözdüm. Görünüşe göre bu mesaj birden fazla hata tipinde kullanılıyor. Benim sorunum, gönderilen en fazla 500 postaya ulaşmış olmamdı.

hesaba giriş yapın ve el ile posta göndermeyi deneyin. Sınıra ulaşılmışsa, sizi bilgilendirir



2
smtp.Host = "smtp.gmail.com"; //host name
smtp.Port = 587; //port number
smtp.EnableSsl = true; //whether your smtp server requires SSL
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
smtp.Timeout = 20000;

1

Gmail şifrenizi değiştirin ve tekrar deneyin, bundan sonra çalışması gerekir.

Nedenini bilmiyorum, ancak hostinginizi her değiştirdiğinizde şifrenizi değiştirmeniz gerekiyor.

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.