Я опаздываю на эту вечеринку, но предложу свой подход для всех прохожих, которые могут быть заинтересованы в альтернативе.
Как отмечалось в предыдущих ответах, класс System.Net.Mail
SmtpClient
не поддерживает Неявный SSL . Он поддерживает Явный SSL , который требует небезопасного соединения с SMTP-сервером через порт 25 для согласования безопасности транспортного уровня (TLS). Я писал о своих трудностях с этой тонкостью здесь .
Короче говоря, для SMTP через Implict SSL-порт 465 требуется согласование TLS до подключения к SMTP-серверу. Вместо того чтобы писать реализацию .Net SMTPS, я обратился к утилите с именем Stunnel . Это небольшая служба, которая позволяет перенаправлять трафик с локального порта на удаленный через SSL.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Stunnel использует части библиотеки OpenSSL, недавно имевшие громкий эксплойт, опубликованный во всех основных технических новостях. Я полагаю, что в последней версии используется исправленная версия OpenSSL, но используйте ее на свой страх и риск.
После установки утилиты небольшое дополнение к файлу конфигурации:
; Example SSL client mode services
[my-smtps]
client = yes
accept = 127.0.0.1:465
connect = mymailserver.com:465
... инструктирует службу Stunnel перенаправлять локальные запросы на порт 465 на мой почтовый сервер через порт 465. Это происходит через TLS, который удовлетворяет SMTP-серверу на другом конце.
С помощью этой утилиты следующий код будет успешно передаваться через порт 465:
using System;
using System.Net;
using System.Net.Mail;
namespace RSS.SmtpTest
{
class Program
{
static void Main( string[] args )
{
try {
using( SmtpClient smtpClient = new SmtpClient( "localhost", 465 ) ) { // <-- note the use of localhost
NetworkCredential creds = new NetworkCredential( "username", "password" );
smtpClient.Credentials = creds;
MailMessage msg = new MailMessage( "joe@schmoe.com", "jane@schmoe.com", "Test", "This is a test" );
smtpClient.Send( msg );
}
}
catch( Exception ex ) {
Console.WriteLine( ex.Message );
}
}
}
}
Таким образом, преимущество в том, что вы можете использовать Implict SSL и порт 465 в качестве протокола безопасности, в то же время используя методы отправки почты, встроенные в платформу. Недостатком является то, что для этого требуется использование сторонней службы, которая может быть бесполезна ни для чего, кроме этой конкретной функции.