2014-02-13 3 views
0

мы используем SMTP-порты 587 для отправки электронной почты через связанную с Gmail учетную запись в C# ASP.NET. Итак, как мы можем применить порт/хост для отправки электронных писем из любой учетной записи, такой как yahoo, Outlook и т. Д.?Отправка электронной почты в C# ASP.NET-запрос SMTP PORT

+0

Сохраните эти значения в файле конфигурации и прочитайте оттуда. Если вы хотите обновить свой хост, просто обновите свой файл конфигурации. – Shyju

ответ

0

Вы можете добиться того, что вы хотите от:

  1. Определить, если почтовые услуги разоблачить SMTP порты для общего пользования

  2. Programatically переключить хост/порт в зависимости от службы код разговаривает ,

Что-то вроде

Если адрес электронной почты Yahoo, а затем подключиться к Yahoo SMTP-сервер.

0

Вы должны хранить информацию SMTP в web.config (read about how to do this).

Тогда в вас коде сделать что-то вроде этого:

System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); 
message.To.Add("[email protected]"); 
message.Subject = "Hello"; 
message.From = new System.Net.Mail.MailAddress("[email protected]"); 
message.Body = "Hello world."; 
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("host_name_defined_in_web_config"); 
smtp.Send(message); 

Если вы обернуть этот код в метод (скажем, MyOwnMailSender.Send()) вы можете упростить его дальше, например, вы можете вызвать:

MyOwnMailSender.Send(addresses, title, body); 
0

Ниже приведен код для установки секций хоста и порта нового SMTP объекта

SmtpClient smtp = new SmtpClient(); 
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtp.Credentials = new NetworkCredential("test", "testpass"); 
smtp.Host = "mail.test.co.uk"; 
smtp.Port = Convert.ToInt32("22"); 

Тогда вы могли бы назвать его в распределительном заявление

switch(account){ 
     case "yahoo" : 
     sendmailYahoo(); 
     break; 
     case "hotmail" : 
     sendmailHotmail(); 
     break; 
} 

явно с этим делом вы бы раздельные методы или вы могли бы назвать его во время выполнения метода, чтобы вы могли иметь

SmtpClient smtp = new SmtpClient(); 
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 

switch(account){ 
     case "yahoo" : 
     smtp.Credentials = new NetworkCredential("yahoo", "testpass"); 
     smtp.Host = "mail.yeahoo.co.uk"; 
     smtp.Port = Convert.ToInt32("212"); 
     break; 
     case "hotmail" : 
     smtp.Credentials = new NetworkCredential("hotmail", "testpass"); 
     smtp.Host = "mail.hotmail.co.uk"; 
     smtp.Port = Convert.ToInt32("232"); 
     break; 
} 
0

Если вы используете SmtpClient, вы можете настроить порт в файле web.config:

<configuration> 
    <system.net> 
    <mailSettings> 
     <smtp deliveryMethod="network"> 
     <network 
      clientDomain="www.contoso.com" 
      defaultCredentials="true" 
      enableSsl="false" 
      host="mail.contoso.com" 
      port="25" 
     /> 
     </smtp> 
    </mailSettings> 
    </system.net> 
</configuration> 

См MSDN

0
 public void MailSend() 
     { 
      using (MailMessage mailMessage = new MailMessage()) 
      { 
       mailMessage.From = new MailAddress("[email protected]"); 
       mailMessage.Subject = "subject"; 
       mailMessage.Body = "body"; 
       mailMessage.IsBodyHtml = true; 
       mailMessage.To.Add(new MailAddress(mail)); 


       SmtpClient smtp = new SmtpClient(); 
       smtp.Host = "smtp.gmail.com"; 
       smtp.EnableSsl = true; 
       System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential(); 
       NetworkCred.UserName = mailMessage.From.Address; 
       NetworkCred.Password = "password"; 
       smtp.UseDefaultCredentials = true; 
       smtp.Credentials = NetworkCred; 
       smtp.Port = 587; 
       smtp.Send(mailMessage); 
      } 
     } 
Смежные вопросы