Веб-приложение ASP.NET MVC не может отправлять электронную почту через SMTP на сервер IIS, размещенный на Arvixe - PullRequest
0 голосов
/ 11 декабря 2018

Мне очень нужна помощь в решении этой проблемы.Как получить развернутое приложение для отправки электронной почты на любой адрес через SMTP?

Я занимаюсь разработкой веб-приложения для отслеживания продаж в Visual Studio 2015 (ASP.NET MVC).Сайт будет размещен на общем сервере Arvixe BusinessClass для Windows.Домен сервера - mydomain.com, однако этот домен фактически размещается на one.com, который также предоставляет электронную почту mydomain.com.

Одной из функций сайта является информирование линейного менеджера, когдаПользователь сообщает о продаже.Линейный менеджер должен быть проинформирован по электронной почте.Учетная запись электронной почты, с которой я пытаюсь отправить, предоставлена ​​one.com.

Используя System.Net.Mail.MailMessage и отправку через SmtpClient, следующий код работает в моей среде разработки (Windows 10 pro), но неразвернут (развернут в среде общего сервера Arvixe BusinessClass для Windows):

MailMessage message = new MailMessage();
message.To.Add("recipient@mydomain.com");
message.From = new MailAddress("sender@mydomain.com", "sender@mydomain.com");
message.IsBodyHtml = true;
message.Subject = "Subject";
message.Body = "Body<br />";
SmtpClient client = new SmtpClient();
client.DeliveryFormat = SmtpDeliveryFormat.SevenBit;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "send.one.com";
client.Port = 587;
client.UseSSL = true;
client.Credentials = new NetworkCredential("sender@mydomain.com", "***");
client.Send(message);

На моем сервере Arvixe появляется ошибка:

    "Unable to read data from the transport connection: net_io_connectionclosed". 

Используя этот код, я также пробовал порты 465 и25, с SSL, установленным в true и false, а также с хостом "mailout.one.com", но безуспешно.

Я сдался и попытался использовать MailKit со следующим кодом:

MimeMessage message = new MimeMessage();
message.To.Add(new MailboxAddress("recipient@mydomain.com"));
message.From.Add(new MailboxAddress("sender@mydomain.com", "sender@mydomain.com"));
var bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = "htmlbody<br />";
bodyBuilder.TextBody = "textbody";
message.Body = bodyBuilder.ToMessageBody();
message.Subject = "Subject";

using (var client = new SmtpClient())
{
    client.ServerCertificateValidationCallback = (s, c, h, e) => true;
    client.Connect("send.one.com", 587, MailKit.Security.SecureSocketOptions.StartTls);  
    client.Authenticate("sender@mydomain.com", "***");
    client.Send(message);
    client.Disconnect(true);
}

Опять же, это работает в моей среде разработки, но не на производстве.Здесь я получаю сообщение об ошибке:

    "The operation is not allowed on non-connected sockets".

Следует отметить, что оба решения работают в развернутой среде, если я изменю хост на 127.0.0.1 и добавлю учетную запись электронной почты example@mydomain.com и подключенную учетную запись пользователя в Arvixe, но толькодля внешних адресов электронной почты.Адреса, оканчивающиеся на mydomain.com, очевидно, перенаправляются обратно на сам сервер, поскольку доменом сервера является mydomain.com, но поскольку провайдером электронной почты является one.com, а не сервер Arvixe, электронная почта не проходит.

Другие вещи, которые я пытался безуспешно:

-Установка записи SPF для mydomain.com для включения адреса моего сервера и IP-адреса моего сервера.

-Использование учетной записи Office365 надругой домен для отправки (хост "smtp.office365.com")

Мне очень нужна помощь в решении этой проблемы.Как получить развернутое приложение для отправки электронных писем на любой адрес через SMTP?

Предложения Arvixe / One.com (из билетов службы поддержки и чата):

  1. Аутентификация SMTP должна бытьused.
  2. Локальный почтовый сервер или localhost должен использоваться для отправки электронной почты через веб-скрипт.(попробуйте xxx.win.arvixe.com, localhost или 127.0.0.1 - порт 25 или 26, или xxxsecuremail.win.arvixe.com - порт 465 для безопасной почты)
  3. Адрес электронной почты FROM и SMTPАдрес электронной почты для аутентификации должен быть локальным пользователем на локальном сервере.

Если у вас есть собственный удаленный почтовый сервер и вы хотите отправлять электронные письма через веб-скрипт на адреса электронной почты, которые являются локальными для вашего домена, тоэтот почтовый домен необходимо удалить с локального сервера (мы должны это сделать), и вам придется использовать учетную запись из другого локального домена на сервере для отправки почты.В противном случае любая электронная почта, отправляемая в локальный домен, будет доставляться локально, а не на ваш удаленный сервер.

...