2015-07-22 9 views
5

StartTLS ve TLS bayrakları : Evet
SSL kullanırken bir hata iletisi görürseniz, bunun yerine TLS veya STARTTLS kullanmayı deneyin.
Liman: 587
SMTP Kimlik Doğrulaması Gerekli: Evet - Ben SSL kullanırsanız ilgili kullanıcı adı ve şifre ileMailkit SMTP şöyle ben SMTPClient aracılığıyla iCloud'a kullanıyorum</p> <p>ayarları bağlanmaya çalışıyorum

Ben

"Tokalaşma beklenmedik paket biçimine başarısız" olsun ben SSL görsel kullanmıyorsanız stüdyo hata ayıklayıcı bağlantıda askıda kalıyor.

Sorun şu ki, SmtpClient'in tls kullanmasını istemiyorum ama bunun nasıl yapılacağına dair belge bulamıyorum. aşağıdaki gibi

kodudur:

using (var client = new SmtpClient()) { 
    client.Timeout = 1000 * 20; 
    //client.Capabilities. 
    client.AuthenticationMechanisms.Remove ("XOAUTH2"); 

    client.Connect("SMTP.mail.me.com", 587, false); //dies here 
    //client.Connect(servername, port, useSsl); 
    //can I set tls or starttls here?? 
    client.Authenticate(username, password); 
    client.Send(FormatOptions.Default, message); 
} 

mıyım mümkün elle TLS veya STARTTLS ayarlamak için. Yaptığım şeylerden biri şudur ama aşağıdaki gibi görünmüyordu.

Bu konuda herhangi bir yardım için teşekkürler.

+0

"SSL" gerektirdiğini söylüyorsanız, 'useSSL 'bayrağı için' false 'yöntemini neden geçiyorsunuz? – Rob

+0

@Rob Doğru ile denedim ve beklenmedik paket biçimi nedeniyle bir Handshake başarısız oldu. iCloud bunu önerir: "SSL kullanırken bir hata mesajı görürseniz, bunun yerine TLS veya STARTTLS kullanmayı deneyin." – cavej03

cevap

8

Kullandığınız yalnızca Connect() yöntemi, SSL ile sarılmış bağlantıların etkinleştirilmesini/devre dışı bırakılmasını sağlar; bu, BaşlangıçTLS ile aynı şey değildir.

using (var client = new SmtpClient()) { 
    // Note: don't set a timeout unless you REALLY know what you are doing. 
    //client.Timeout = 1000 * 20; 

    // Removing this here won't do anything because the AuthenticationMechanisms 
    // do not get populated until the client connects to the server. 
    //client.AuthenticationMechanisms.Remove ("XOAUTH2"); 

    client.Connect ("smtp.mail.me.com", 587, SecureSocketOptions.StartTls); 

    client.AuthenticationMechanisms.Remove ("XOAUTH2"); 

    client.Authenticate (username, password); 
    client.Send (message); 
} 

o deneyin:

nedeniyle karışıklığa, ben ne olup bittiğini bu daha belirgin hale getirir ayrı Connect() yöntemi uyguladık. Bu

await client.ConnectAsync(mailService.Host, mailService.Port, SecureSocketOptions.Auto); 

MailKit gibi

+0

bu eser .. @ cavej03 lütfen bu anwser'i kabul edin – om471987

0

Sen seçeneklerini ayarlayabilirsiniz için "SecureSocketOptions.Auto" şey otomatik SSL veya TLS kullanmaya karar olacaktır.

+0

Karar vermek için ne kullanıyor? Liman numarası? –

+0

Modelinizde ayarlamanız gereken port numarası. Bu, google postadan veya nelerin herhangi birinden port numarasıdır. Bu yüzden sadece modelimi arayıp, DB'mden bağlantı noktası ve ana bilgisayar için sorun .... Ama burada önemli olan "SecureSocketOptions.Auto" – error505

+0

@PaulKnopf Evet, MailKit karar vermek için bağlantı noktasını kullanır. Dünyadaki en iyi sistem değil, ama% 99 oranında çalışıyor. – jstedfast

İlgili konular