2011-07-19 8 views
1

Il semble que de nombreuses solutions impliquent l'utilisation d'un serveur: smtp.gmail.com et System.Net.Mail.SmtpClient.envoyer un email sans gmail

Autre de vous suggérons d'utiliser System.Web.Mail (dont beaucoup disent a été dépréciée): here for example.

En tout cas, quand je l'ai essayé, je ne pouvais pour obtenir l'un des exemples ci-dessus pour fonctionner. Je ne pense pas que ce soit un problème de pare-feu. Je suis capable d'utiliser Outlook Express pour envoyer des emails via Gmail. L'erreur dans C# que je reçois est que la machine cible refuse activement la connexion.

Dois-je essayer d'utiliser Outlook à partir du code? Est-ce que la meilleure façon de le faire serait par AutoIt ou par le biais de certains dll/com? Pourquoi ai-je besoin d'un serveur en premier lieu? En C# je peux télécharger des choses sur le web, pourquoi ne puis-je pas envoyer des webpackages spécifiquement formatés (emails) directement à partir de C#, sans avoir à utiliser une sorte de serveur?

+1

fait u besoin d'héberger 'serveur SMTP' ou un service déjà établi – Sudantha

+0

pourriez-vous expliquer ce que vous entendez par ça? Pourquoi est-ce nécessaire? – user420667

+1

Que ce soit strictement nécessaire varie selon la langue/bibliothèque, mais les e-mails provenant de n'importe où est généralement bloqué par certains filtres et grands hôtes de messagerie. – ssube

Répondre

0

vous avez besoin d'un relais ou d'une passerelle smtp. J'utilise http://sendgrid.com/ pour envoyer des emails depuis le cloud, ils ont une option gratuite.

Il y a aussi un exemple de code sur la façon d'envoyer des courriels, j'ai re-factorisé leur code pour que je puisse l'appeler d'autres endroits.

public partial class Email 
{ 
/// <summary> 
/// Generic Email method used to send email through SendGrid 
/// </summary> 
/// <param name="ToAddressName">ToAddress, DisplayName</param> 
/// <param name="FromAddress">Email address of sender</param> 
/// <param name="FromName">Display Name of sender</param> 
/// <param name="SendCopy">Send BCC to FromAddress</param> 
public void SendEmail(Dictionary<string, string> toAddressName, 
         String fromAddress, String fromName, 
         String subject, String message, 
         bool sendCopy) 
{ 
    try 
    { 
    MailMessage mailMsg = new MailMessage(); 

    // To 
    foreach (KeyValuePair<string, string> kvp in toAddressName) 
    { 
     string toAddress = kvp.Key; 
     string displayName = kvp.Value; 
     mailMsg.To.Add(new MailAddress(toAddress, displayName)); 
    } 

    // From 
    mailMsg.From = new MailAddress(fromAddress, fromName); 

    if (sendCopy) 
    { 
     mailMsg.Bcc.Add(new MailAddress(fromAddress, fromName)); 
    } 

    // Subject and multipart/alternative Body 
    mailMsg.Subject = subject; 

    string html = message; 
    mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html)); 

    // Init SmtpClient and send 
    SmtpClient smtpClient = new SmtpClient("smtp.sendgrid.net", Convert.ToInt32(587)); 

    System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("sendgridusername", "sendgridpassword"); 
    smtpClient.Credentials = credentials; 

    smtpClient.Send(mailMsg); 
    } 
    catch (Exception ex) 
    { 
    Error error = new Error(); 
    error.ReportError(ex); 
    } 
} 

(ps si vous avez des commentaires sur mon code que j'aimerais entendre, merci)

+0

Si vous voulez des commentaires sur votre code, je recommande codereview at stackexchange. Votre code a l'air de fonctionner. Désolé, mais cela entraînerait essentiellement les mêmes problèmes que j'avais auparavant. Je pense que c'est un problème informatique et non un problème de code, même si je ne sais pas exactement pourquoi. Donc, je vais probablement finir par essayer wireshark ou peut-être même une nouvelle installation de l'OS. – user420667