Ошибка отправки почтового сообщения из приложения ASP.NET MVC, размещенного на GoDaddy - PullRequest
6 голосов
/ 15 декабря 2010

У меня есть форма в веб-приложении MVC, размещенная на GoDaddy, которую пользователи могут заполнить и отправить в наш офис.В настоящее время я тестирую его, используя как учетную запись Gmail, так и учетную запись электронной почты GoDaddy (связана с моим хостингом).При наличии кода Gmail электронное письмо будет отправлено в порядке с моего локального хоста, но когда я публикую его в Интернете, я получаю следующую ошибку:

Запрос на разрешение типа 'System.Net.Mail.SmtpPermission, System, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 'не удалось.

Вот код (заимствованный из этой записи ), которую я использую, учетные данные были изменены и пароль удален:

var fromAddress = new MailAddress("iihs.eval@gmail.com", "FEA Drone");
var toAddress = new MailAddress("improveithomeservices@gmail.com", "ImproveIt Home Services");
const string fromPassword = "<removed>";
var subject = string.Format("Energy Evaluation Request for {0} {1}", model.FirstName, model.LastName);
var body = MailBody(results);

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}    

Затем я попытался использовать адрес электронной почты GoDaddy, который я настроил для этой конкретной формы, и снова локально он отправляет.Однако, когда этот файл загружен, он просто останавливается, а не дает мне какую-либо полезную информацию.Вот этот код:

var fromAddress = new MailAddress("fea@goimproveit.com", "FEA Drone");
var toAddress = new MailAddress("improveithomeservices@gmail.com", "ImproveIt! Home Services");
const string fromPassword = "<removed>";
var client = new SmtpClient
{
    Host = "relay-hosting.secureserver.net",
    Port = 25,
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Timeout = 20000,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};

using (var msg = new MailMessage(fromAddress, toAddress)
{
    Subject = string.Format("Energy Evaluation Request for {0} {1}", model.FirstName, model.LastName),
    IsBodyHtml = false,
    Body = MailBody(results)
})
{
    client.Send(msg);
}

Первоначально у меня был smtpout.secureserver.net для моего GoDaddy Host, но я узнал из этой статьи , что мне нужно было изменить его на relay-hosting.secureserver.net.С обновленной информацией о хосте скрипт запускается, но почтовое сообщение не попадает в почтовый ящик назначения (или ящик для спама).

Редактировать

Используя код Максима, кажется, я получил«функционирующая» версия на месте.Письмо не сразу появляется в папке «Входящие», но появляется примерно через 15 минут.Жаль, что кажется, что GoDaddy - гигантская PITA, когда дело доходит до программной электронной почты.

Вот что я получил:

var emailmessage = new System.Web.Mail.MailMessage()
{
    Subject = subject,
    Body = body,
    From = fromAddress.Address,
    To = toAddress.Address,
    BodyFormat = MailFormat.Text,
    Priority = System.Web.Mail.MailPriority.High
};

SmtpMail.SmtpServer = "relay-hosting.secureserver.net";
SmtpMail.Send(emailmessage);

Еще раз спасибо за помощь, я надеюсь, что смогу понятьо том, как заставить GoDaddy сотрудничать лучше.Если я могу, я отправлю обратно с обновлениями.

Ответы [ 4 ]

7 голосов
/ 15 декабря 2010

У меня также есть приложения ASP.NET MVC, размещенные на GoDaddy, которые отправляют электронную почту. К сожалению, политика электронной почты GoDaddy несколько плоха:

Прежде всего, вы должны использовать relay-hosting.secureserver.net - вы не можете использовать внешние SMTP-серверы, такие как Gmail.

Во-вторых, relay-hosting обычно очень очень медленно . По моему опыту, некоторые электронные письма занимают 90 минут , а другие просто не доставляются .

Я много раз писал по электронной почте с поддержкой GoDaddy об этой проблеме, но им еще предстоит исправить огромное время ожидания / проблемы или разрешить внешние SMTP-серверы.


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

var emailmessage = new System.Web.Mail.MailMessage()
                                   {
                                       Subject = "Subject",
                                       Body = "Body",
                                       From = "myFromAddress@domain.com",
                                       To = "myToAddress@someotherdomain.com",
                                       BodyFormat = MailFormat.Text,
                                       Priority = MailPriority.High
                                   };

SmtpMail.SmtpServer = "relay-hosting.secureserver.net";
SmtpMail.Send(emailmessage);

Единственное, что отличается (насколько я заметил), это то, что вы пытаетесь предоставить учетные данные для SMTP-сервера. На самом деле, relay-hosting.secureserver.net не требует никаких учетных данных , но будет отправлять электронную почту только в том случае, если обнаружит, что сообщение отправлено с сервера GoDaddy. Это может решить вашу проблему!

3 голосов
/ 04 января 2013

Я получил эту ошибку: «Имя почтового ящика не разрешено. Ответ сервера: извините, ретрансляция запрещена из вашего местоположения».Я использовал это для подключения:

SmtpClient smtpClient = new SmtpClient();
smtpClient.Host = "relay-hosting.secureserver.net";
smtpClient.Port = 25;
smtpClient.Timeout = 10000;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new NetworkCredential("emailAddress", "password");
String bodyText = "Hello World";
MailMessage mailMessage = new MailMessage("fromEmail", "toEmail", "Subject", bodyText);
mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
smtpClient.Send(mailMessage);

После рассмотрения этого ответа: https://stackoverflow.com/a/4594338/1026459 я пришел к выводу, что Host должен отличаться при использовании кредитов .Я изменил свой код на это:

SmtpClient smtpClient = new SmtpClient();
smtpClient.Host = "smptout.secureserver.net";
//same code as above

И письма не только отправлялись правильно, но и приходили за считанные секунды.

2 голосов
/ 15 декабря 2010

Не помню, где я нашел этот код, но он работает на моем сервере GoDaddy для отправки электронной почты через учетную запись Google:

public class GmailService : IEmailService
{
    private static int _port = 465;
    private readonly string _accountName;
    private readonly string _password;

    public GmailService(string accountName, string password)
    {
        _accountName = accountName;
        _password = password;
    }
    public void Send(string from, string to, string subject, string body, bool isHtml)
    {
        Send(from, to, subject, body, isHtml, null);
    }

    public void Send(string from, string to, string subject, string body, bool isHtml, string[] attachments)
    {
        System.Web.Mail.MailMessage mailMessage = new System.Web.Mail.MailMessage
                                                      {
                                                          From = from,
                                                          To = to,
                                                          Subject = subject,
                                                          Body = body,
                                                          BodyFormat = isHtml ? MailFormat.Html : MailFormat.Text
                                                      };


        // Add attachments
        if (attachments != null)
        {
            for (int i = 0; i < attachments.Length; i++)
            {
                mailMessage.Attachments.Add(new Attachment(attachments[i]));
            }
        }

        //  Authenticate
        mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1);
        // Username for gmail - email@domain.com for email for Google Apps
        mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", _accountName);
        // Password for gmail account
        mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", _password);
        // Google says to use 465 or 587.  I don't get an answer on 587 and 465 works - YMMV
        mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", _port.ToString());
        // STARTTLS 
        mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", true);

        // assign outgoing gmail server
        SmtpMail.SmtpServer = "smtp.gmail.com";
        SmtpMail.Send(mailMessage);
    }
}

Обновление: вот как я использую этот код:

GmailService gmail = new GmailService("do_not_reply@bobcravens.com", "the_password");
const string from = "Email Service <do_not_reply@bobcravens.com>";
const string to = "my_email_address";
const string subject = "Contact Form";
string body = "your message";
gmail.Send(from, to, subject, body, false);

Это может иметь значение ... У меня есть аккаунт Google Apps (бесплатно).Поэтому я могу иметь адрес от того же домена, что и мой сервер.

0 голосов
/ 10 декабря 2015

Работает нормально, следуйте моим указаниям

  1. Сначала проверьте свой план электронной почты от Godaddy Webmail

    а. Войдите в свою учетную запись.

    б. Щелкните по электронной почте рабочей области.

    с. Рядом с учетной записью, которую вы хотите использовать, нажмите Управление.

    д. Для учетной записи с адресом электронной почты, который вы хотите использовать, нажмите (Показать адреса).

    е. Нажмите на адрес электронной почты, который вы хотите использовать, а затем перейдите на вкладку «Дополнительно». Здесь показан план электронной почты.

    [1]: http://i.stack.imgur.com/AJAoB.png

    Исходя из плана электронной почты, вы выбираете имя хоста. Пример: если AP плана электронной почты (2) означает smtp.Host = "smtpout.asia.secureserver.net", или если план электронной почты EU (2) означает smtp.Host = "smtpout.europe.secureserver.net" или если план электронной почты США означает smtp.Host = "smtpout.secureserver.net".

  2. Убедитесь, что ваш сайт с SSL или без SSL. Потому что вы выбираете номер порта на основе SSL Пример: если без SSL означает smtp.EnableSsl = false Выходящий номер порта равен 25, 80, 3535. В случае, если с SSL означает mtp.EnableSsl = true. Выходной номер порта равен 465.

    Это все основные моменты, которые необходимо учитывать при работе с почтовой конфигурацией Godaddy.

    Ниже укажите код,

    using (MailMessage mail = new MailMessage(from, mailmodel.To))
                        {
    
                            mail.Subject = mailmodel.Subject;
                            mail.IsBodyHtml = true;
                            mail.Body = mailmodel.Body;
                            mail.Priority = MailPriority.High;
                            SmtpClient smtp = new SmtpClient();
                            smtp.Host = host;
                            smtp.EnableSsl = false;
                            smtp.UseDefaultCredentials = false;
                            NetworkCredential networkCredential = new NetworkCredential(from, Password);
                            smtp.Credentials = networkCredential;
                            smtp.Port = portNo;
                            smtp.Timeout = 100000;                                smtp.Send(mail);}
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...