C#

2010-11-22 4 views
1

kullanarak Gmail üzerinden gönderilen postalar için farklı bir "Gönderen" adresi ayarlıyorum System.Net.Mail'u kullanan basit bir posta gönderen sınıfı kullanıyorum. Uygulamamı çeşitli kullanıcılar tarafından e-posta gönderebilmeleri için (aynı smtp hesabını kullanarak) güncellemem gerekiyor, ancak "Gönderen" adresinin gönderilmesine neden olan kullanıcı olması gerekir. MailMessage'un From özelliğini ayarlamayı denedim ve MailMessage yapıcısından adresini yazdım ama çalışanların burnunu. Eminim, basit bir şey eksik veya posta API'sinin nasıl çalıştığını anlamadım. Biri yardım edebilir mi?C#

Basit bir posta gönderme arabirimi sağlamak için temel olarak MailMessage, NetworkCredential ve SmtpClient'u yükleyen MailSender sınıfım.

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, hesabınızın ayarlarına göre değiştirir. – leppie

+2

Google'ın, kimlik doğrulaması için kullandığınız kimlik bilgileri dışındaki hesaplardan posta göndermenize izin vermeyeceği iyi olabilir. –

+0

@leppie ve @Mikael Svenson: ofisimizin smtp ile de denedi. Aynı sonuçlar. – MAK

cevap

3

Başka bir SMTP sunucusuyla test ederek cevabı öğrendim. Bu aslında GMail'in başka adreslere izin vermemesinden kaynaklanmaktadır. Bu diğer SMTP sunucuları ile iyi çalışıyor.

Teşekkürler leppie, Mikael Svenson ve smirkingman önerileri için.

+0

Gönderen adresini güçlendirirseniz veya bu alana izin verilmeyen bir sunucu kullanırsanız, postalarınız spam olarak engellenebilir. – CodesInChaos

+0

@CodeInChaos: Hayır. Tüm e-postalar gönderilmiş ve gelen kutuma (ve diğer gelen kutulara) gönderilmiştir. Onlar sadece sahip olmak istediğim adres yerine onları göndermek için kullanılan GMail hesabı ile aynı "adres" vardı. Başka bir smtp sunucusuna geçmek sorunu giderdi. – MAK

+0

Tabii ki google değişti Gönderen postalar smtp sunucusu ve e-posta eşleşmesi beri tamam. Ancak, başka bir smtp kullanırsanız, bu da postadan filtrelenebilir. Özellikle de "Kimden" alanındaki e-postanın alanı "SPF" kullanıyorsa. – CodesInChaos

1

Gmail adreslerden başkalarına izin vermiyor. Size yardımcı olabilir, bu şekilde aşağıdaki şekilde değiştirebilirsiniz:

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