2010-11-22 4 views
1

J'utilise une classe d'expéditeur de courrier simple qui utilise le code System.Net.Mail. J'ai besoin de mettre à jour mon application afin que les différents utilisateurs puissent envoyer un email via celle-ci (en utilisant le même compte smtp) mais l'adresse "De" doit être celle de l'utilisateur qui l'envoie. J'ai essayé de définir la propriété From de MailMessage, et d'envoyer l'adresse de dans le constructeur de MailMessage mais nez de ceux qui ont travaillé. Je suis sûr qu'il me manque quelque chose de simple ou de ne pas comprendre comment l'API de messagerie fonctionne. Quelqu'un peut-il aider?Définition d'une autre adresse "De" pour le courrier envoyé via Gmail à l'aide de C#

Voici ma classe MailSender qui enveloppe essentiellement les MailMessage, NetworkCredential et SmtpClient pour fournir une interface d'envoi de courrier simple.

class MailSender 
{ 
    private NetworkCredential credential; 
    private String SenderAddress; 
    private SmtpClient client; 

    public MailSender(String ServerURL, String account, String password, String FromAddress = null, int port = -1, bool UseSSL = true) 
    { 
     if (port > 0) 
     { 
      client = new SmtpClient(ServerURL, port); 
     } 
     else 
     { 
      client = new SmtpClient(ServerURL); 
     } 
     credential = new NetworkCredential(account, password); 
     client.UseDefaultCredentials = false; 
     client.EnableSsl = UseSSL; 
     client.Credentials = credential; 

     if (FromAddress != null) 
     { 
      SenderAddress = FromAddress; 
     } 
     else 
     { 
      SenderAddress = account; 
     } 
    } 

    public bool SendMessage(String to, String subject, String body) 
    { 
     try 
     { 
      MailMessage message = new MailMessage(SenderAddress, to, subject, body); 
      message.From = new MailAddress(SenderAddress, "tester"); 

      message.IsBodyHtml = true; 
      client.Send(message); 
     } 
     catch 
     { 
      return false; 
     } 
     return true; 
    } 
} 
+1

IIRC, GMail le modifie en fonction de vos paramètres du compte. – leppie

+2

Il se peut très bien que Google ne vous autorise pas à envoyer des messages à partir de comptes autres que les informations d'identification que vous transmettez pour authentification. –

+0

@leppie et @Mikael Svenson: essayé avec le smtp de notre bureau. Mêmes résultats – MAK

Répondre

3

Je viens de trouver la réponse en testant avec un autre serveur SMTP. Ceci est en fait causé par GMail ne permettant pas d'autre de l'adresse. Cela fonctionne très bien avec les autres serveurs SMTP.

Merci à Leppie, Mikael Svenson et smirkingman pour leurs suggestions.

+0

Il est probable que vos mails soient bloqués comme spam si vous forgez l'adresse de l'expéditeur/utilisez un serveur qui n'est pas autorisé pour ce domaine. – CodesInChaos

+0

@CodeInChaos: Non. Tous les e-mails ont été envoyés et ont fait leur chemin vers ma boîte de réception (et d'autres boîtes de réception). Ils ont juste eu l'adresse "de" la même chose que le compte GMail qui a été utilisé pour les envoyer au lieu de l'adresse que je voulais avoir. Passer à un autre serveur SMTP a supprimé le problème. – MAK

+0

Bien sûr, les mails où google a changé le De étaient ok depuis smtp serveur et email correspondent. Mais si vous utilisez un autre smtp qui ne le fait pas, le mail peut être filtré. En particulier si le domaine de l'email dans le champ 'From' utilise' SPF'. – CodesInChaos

1

Gmail n'autorisant aucune autre adresse. Il pourrait vous aider, vous pouvez changer la rediffusion de cette façon:

mail.ReplyTo = new MailAddress ("[email protected]");

Questions connexes