Ошибка подключения SMTP ASP.net

Следующий код выводит ошибку за ошибкой.

        MailMessage Enveloppe = new MailMessage();

        //emails is an array of strings
        foreach ( string email in emails )
            Enveloppe.To.Add(email);

        //Setup message parameters
        Enveloppe.Subject = "Documentation";
        Enveloppe.Body = "Infinitelycoolbodyhere"
        Enveloppe.From = new MailAddress("mrzombie@stuff", "Myname");

        //files is an array of strings
        foreach ( string filename in files ) { 
            //Add attachments
            Enveloppe.Attachments.Add(new Attachment(new System.Net.WebClient().OpenRead(filename),filename.Substring(filename.LastIndexOf('/'))));
        }

        //Create the smtp client, and let it do its job
        SmtpClient Mailman = new SmtpClient("mysmtphost");
        Mailman.EnableSsl = true;
        Mailman.Port = 465;
        Mailman.DeliveryMethod = SmtpDeliveryMethod.Network;
        Mailman.Credentials = new System.Net.NetworkCredential("usernamehere", "passwordhere");
        Mailman.Send(Enveloppe);

Бывает так, что он либо сообщает мне, что время моей операции истекло, либо что «Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через определенный период времени, или установленное соединение не удалось, потому что подключенный хост не ответил».

Я в тупике, я не вижу, что я делаю неправильно

Обновление: я не могу подключиться к серверу через Telnet, в лучшем случае я подключаюсь к своему ноутбуку (под Ubuntu), но я никогда не получаю ответ «200». Под рабочей станцией Windows я получаю постоянное пустое окно telnet.

Я могу отправлять/получать электронную почту на указанный сервер с помощью Thunderbird без каких-либо проблем.


person Olivier Tremblay    schedule 26.05.2009    source источник


Ответы (4)


Наконец-то нашел виновника - каким-то образом соединение между «предположительно правильным» smtp-сервером, который мне предоставила хостинговая компания, и фактическим smtp-сервером осталось зависшим. Я просто изменил адрес mail.domain.com на smtp.hostingdomain.com, и это все исправило.

Это просто один из тех моментов "какого черта", которые я ненавижу. Из-за этого мне пришлось отказаться от функции отправки почты через приложение, но в конце концов мы с начальником решили, что вместо этого мы будем размещать файлы где-нибудь и включать ссылки в электронное письмо вместо добавления вложенных файлов. на почту.

Итак, да, это на самом деле не отвечает на вопрос, но для тех, кто рассматривает решение, но вы можете поместить файлы, которые хотите отправить, в место, доступное извне, и вместо этого включить ссылку. Там.

person Olivier Tremblay    schedule 08.06.2009

Этот SMTP-сервер запущен и работает на 465 и поддерживает ли он SSL?

person JoshBerke    schedule 26.05.2009
comment
Я попробовал две или три вещи, когда первый сервер не ответил. Я попытался использовать smtp-сервер моего личного веб-сайта с использованием ssl, следовательно, часть ssl в коде. Мне это не удалось, время ожидания операции истекло, но, поскольку я могу отправлять и получать электронную почту с помощью сервера, используя шифрование, я должен предположить, что он запущен и работает. - person Olivier Tremblay; 26.05.2009

Похоже, что-то пошло не так при попытке связаться с вашим SMTP-сервером (ха, ни хрена!).

Я предполагаю, что вы используете Windows, поэтому перейдите в «Пуск» -> «Выполнить» -> «telnet mysmtphost 465» и посмотрите ответ, который вы получите в консоли.

Вы видите что-то подобное?

Connected to mysmtphost.
Escape character is '^]'.
220 mysmtphost
person Ghazaly    schedule 26.05.2009
comment
С моего ноутбука Ubuntu я получаю ожидаемый результат. С моей рабочей станции в той же сети (штучка, выполняющая код) я получаю вечно пустое окно telnet. - person Olivier Tremblay; 26.05.2009
comment
О, у меня нет 200 mysmtphost в любом случае. - person Olivier Tremblay; 26.05.2009
comment
Предположение: если мой ноутбук может отправлять/получать электронную почту, то я должен проверить, что машина, на которой я работаю, и та, на которой будет запускаться программа, не имеет правила брандмауэра для порта 465 или 25, верно? - person Olivier Tremblay; 27.05.2009
comment
Не беспокойтесь о вечно пустом окне telnet. Это означает, что вы можете прекрасно подключиться к smtp-серверу. Пожалуйста, попробуйте подключиться через telnet с машины, на которой вы работаете. Если вы не можете подключиться к smtp-серверу, то я думаю, что разумно предположить, что это проблема с брандмауэром. - person Ghazaly; 27.05.2009

Попробуйте включить трассировку для System.Net.Mail (похоже, вы используете SNM). Для этого вам нужно будет добавить следующее в ваш файл .config.

<configuration>
  <system.diagnostics>
    <trace autoflush="true" />

    <sources>

      <source name="System.Net" >
        <listeners>
          <add name="MyTraceFile"/>
        </listeners>
      </source>

      <source name="System.Net.Sockets">
        <listeners>
          <add name="MyTraceFile"/>
        </listeners>
      </source>

    </sources>


    <sharedListeners>
      <add
        name="MyTraceFile"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="System.Net.trace.log"                />
    </sharedListeners>

    <switches>
      <add name="System.Net" value="Verbose" />
      <add name="System.Net.Sockets" value="Verbose" />
    </switches>

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

У меня есть дополнительная информация о том, чего ожидать: http://systemnetmail.com/faq/4.10.aspx

person dave wanta    schedule 27.05.2009