2011-12-28 9 views
9

Я пытаюсь отправить почту через Amazon SES нового сервиса SMTP с использованием .NET встроено в SmtpClientОтправка электронной почты с помощью ошибки Amazon SES SMTP

Код:

var emailClient = new SmtpClient("email-smtp.us-east-1.amazonaws.com", 465); 
        emailClient.EnableSsl = true; 
.... 
emailClient.Send(message); 

я получаю исключение:

Невозможно прочитать данные из транспортного соединения: net_io_connectionclosed

Google говорит, что эта ошибка означает, что я не могу связаться с SMTP-сервером. Они требуют TLS, которые я верю, достигнув свойством «EnableSsl».

Кто-нибудь знает, как мне нужно настроить мой код, чтобы он работал?

EDIT:

Я предполагаю, что я закрою этот вопрос. Нет, это не возможно, чтобы делать то, что я хочу с SmtpClient

https://forums.aws.amazon.com/thread.jspa?messageID=302112&#302112

+0

Не сразу отвечая на вопрос, но вы можете скачать AWSSDK.dll и использовать свой собственный API, это действительно невероятно просто, и вам не нужно беспокоиться о SMTP, совместимости, интернет-провайдерах и т. Д. –

+1

То, что я использую прямо сейчас. Но я хотел сделать SMTP, так как они выпустили его недавно. Таким образом, мне не нужно иметь дело с AWSSDK. – katit

+0

. Вы производите свое имя пользователя и пароль SES? – arx

ответ

5

Я могу подтвердить, что он работает с STARTTLS и порт 587.

Надежда, что помогает

+0

:(Я только что протестировал сейчас, и только 2587 работает с по умолчанию SmtpClient. Ну, по крайней мере, он работает после часа попыток разных портов ... – kape123

+1

Ваша ссылка сломана. Вы должны заменить ее или удалить –

0

Настроена defaultCredentials = «ложь» в web.config?

+0

Мне очень любопытно, что вы имеете в виду или почему это сработает: вы предполагаете, что веб-приложение ASP.NET разрабатывается, я думаю, но почему некоторые настройки учетных данных в web.config влияют на SMTP-соединение? –

+0

Извините за любую путаницу, если я неправильно понял смысл «файла конфигурации», который я предположил, это Web.config с соответствующими настройками SMTP. Когда я использовал (.NET) SMTP и должен был указать имя пользователя и пароль, я сделал это в разделе . Если я не установил defaultCredettials = false, соединение завершится неудачно. –

5

Согласно Amazon - он не поддерживается, как мы привыкли.

https://forums.aws.amazon.com/thread.jspa?messageID=302112&#302112

The .NET библиотеки электронной почты TLS поддерживает только STARTTLS, которая SES не поддержки сегодня. Мы поддерживаем то, что называется аутентификацией TLS Wrapper или SMTPS . Я могу понять, как это будет расстраивать, но вы можете использовать OpenSSL в качестве обходного пути и туннеля через это программное обеспечение , работающее на вашем компьютере, чтобы использовать .NET для программирования против нашей конечной точки SMTP .

1

Для тех, кто хочет отправить нормальный .Net SMTPClient. Это возможно, так как вам просто нужна обертка.

Вот ссылка со всей информацией:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SMTP.Client.html

Установка программного обеспечения туннелирования и настройки, как описывают в ссылке, то его так же просто, как:

System.Net.Mail.SmtpClient sc = new SmtpClient(); 
sc.Host = host; 
sc.Port = port; 
sc.Credentials = new NetworkCredential(username, password); 
sc.Send(mm); 
8

можно сделайте это, указав порт 587.

<system.net> 
    <mailSettings> 
    <smtp deliveryMethod="Network"> 
     <network enableSsl="true" port="587" host="email-smtp.us-east-1.amazonaws.com" password="[password]" userName="[username]"/> 
    </smtp> 
    </mailSettings> 
</system.net> 

При том, что в конфигурации, вы можете использовать SmtpClient как обычно

var client = new SmtpClient(); 
var message = new MailMessage(fromemail, recipient, subject, body); 
client.Send(message); 
+0

Я думаю, это было просто добавлено. Можете ли вы опубликовать ссылку на документацию SAS Amazon, где они подтверждают поддержку порта 587? – katit

+0

У меня была такая же конфигурация, что и в Windows 7, но не на windows xp. Любая идея почему? –

+0

@katit: Это официальное объявление: http://aws.amazon.com/de/about-aws/newsletters/2012/03/15/March2012/ Отправляю сообщение в блоге в свой ответ для получения дополнительной информации – Masterfu

3

Теперь SES поддерживает STARTTTLS:

Сервер исходящей почты (SMTP) -25, 587, или 2587 (для подключения с использованием STARTTLS), или 465 или 2465 (для подключения с использованием TLS Wrapper).

Pruf ссылка: http://s3.amazonaws.com/awsdocs/ses/latest/ses-dg.pdf

+0

Для меня только порт 587 работал с SmtpClient. – swax

4

Как masterfu упоминает в своем блоге, Amazon SES начал поддерживать STARTTLS в марте 2012 года.

Ниже приведен код, который я использовал для работы SMTP с Amazon.

string username = ConfigurationManager.AppSettings["AWSSMTPUser"]; 
    string password = ConfigurationManager.AppSettings["AWSSMTPPass"]; 

    SmtpClient smtp = new SmtpClient(); 
    smtp.Host = "email-smtp.us-east-1.amazonaws.com"; 
    smtp.Port = 587; 
    smtp.UseDefaultCredentials = false; 
    smtp.Credentials = new NetworkCredential(username, password); 
    smtp.EnableSsl = true; 

    smtp.Send(mail); 
0

Попробуйте использовать порт №. 2587, другой порт 25, 425, 587 работает для моего дела.

Смежные вопросы