2009-03-11 6 views
3

Следующая функция работает отлично:Портирование System.Web.Mail к System.Net.Mail

protected void SendWebMailMessage(string DisplayName, string From, string ReplyTo, 
     string To, string Subject, string Body, string Attachments) 
    { 
     System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage(); 
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", 
      "smtpout.secureserver.net"); 
     msg.Fields.Add(
      "http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25); 
     msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 
      2); 
     msg.Fields.Add(
      "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1); 
     msg.Fields.Add(
      "http://schemas.microsoft.com/cdo/configuration/sendusername", From); 
     msg.Fields.Add(
      "http://schemas.microsoft.com/cdo/configuration/sendpassword", 
      mailpassword); 
     msg.To = To; 
     msg.From = DisplayName + "<" + From + ">"; 
     msg.BodyFormat = MailFormat.Html; 
     msg.Subject = Subject; 
     msg.Body = Body; 
     msg.Headers.Add("Reply-To", ReplyTo); 
     SmtpMail.SmtpServer = "smtpout.secureserver.net"; 
     SmtpMail.Send(msg); 
    } 

Однако я получаю предупреждение сборки говорит мне, что System.Web.Mail является устаревшим, и что Я должен использовать System.Net.Mail. Поэтому я использовал System.Net.Mail, и я придумал следующую функцию, чтобы заменить мой старый:

protected void SendNetMailMessage(string DisplayName, string From, string ReplyTo, 
     string To, string Subject, string Body, string Attachments) 
    { 
     MailAddress addrfrom = new MailAddress(From, DisplayName); 
     MailAddress addrto = new MailAddress(To); 
     MailAddress replytoaddr = new MailAddress(ReplyTo); 
     System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(); 
     msg.From = addrfrom; 
     msg.To.Add(addrto); 
     msg.ReplyTo = replytoaddr; 
     msg.IsBodyHtml = true; 
     SmtpClient smtp = new SmtpClient("smtpout.secureserver.net"); 
     smtp.Credentials = new NetworkCredential(From, mailpassword); 
     smtp.Send(msg); 
    } 

Я не получаю никаких исключений и ошибок, но мое сообщение не проходит. Может ли кто-нибудь сказать, что я могу делать неправильно? Заранее спасибо.

+0

Вы уверены, что это подлинность? Лучше проверить журнал событий на почтовом сервере, а также в локальной системе? – RobS

+0

У меня нет доступа к журналам почтового сервера. Это размещенный почтовый сервер. Однако, если он не аутентифицировался правильно, я бы ожидал, что метод System.Net.Mpt.CliptClient.Send() выдаст исключение, например System.Web.Mail.SmtpMail.Send() выдает исключение, когда аутентификация не успешный. –

+0

Я тестирую аналогичную реализацию (я только что перешел на System.Net.Mail тоже) увидит, получаю ли я ту же проблему – RobS

ответ

1

Если я не ошибаюсь ... вы используете хостинг Goddady. Я также использую его ... и у меня есть **relay-hosting.secureserver.net** как сервер SMTP. Я не знаю ... может быть, может быть что-то вроде этого ... или вы не установили Relay в свою консоль.

1

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

Первоначально я не изменил вашу строку хоста и получил исключение с сообщением «Отказ отправки почты».

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