2010-11-22 3 views
1

System.Net.Mail을 사용하는 간단한 메일 보낸 사람 클래스를 사용하고 있습니다. 다양한 사용자가 동일한 smtp 계정을 사용하여 이메일을 보낼 수 있도록 응용 프로그램을 업데이트해야하지만 "보낸 사람"주소는 보낸 사람의 주소 여야합니다. 내가 MailMessageFrom 속성을 설정하고, MailMessage의 생성자로 보낸 사람의 주소를 보냈지 만 그 코가 작용했습니다. 나는 메일 API가 어떻게 작동하는지 이해하지 못하거나 무언가를 놓치고 있다고 확신한다. 누구든지 도와 줄 수 있습니까?C#을 사용하여 Gmail을 통해 보낸 메일의 다른 "보낸 사람"주소 설정

기본적으로 MailMessage, NetworkCredentialSmtpClient을 래핑하는 내 MailSender 클래스는 간단한 메일 보내기 인터페이스를 제공합니다.

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은 계정 설정에 따라 수정합니다. – leppie

+2

인증을 위해 전달한 자격 증명 이외의 계정에서 메일을 보내지 못하도록하는 것이 좋습니다. –

+0

@leppie와 @Mikael Svenson : 우리 사무실의 smtp에서도 사용해 보았습니다. 같은 결과. – MAK

답변

3

방금 ​​다른 SMTP 서버로 테스트하여 대답을 발견했습니다. 이것은 실제로 GMail이 다른 주소를 허용하지 않기 때문에 발생합니다. 이것은 다른 SMTP 서버에서도 잘 작동합니다.

그들의 제안에 대해 leppie, Mikael Svenson 및 smirkingman에게 감사드립니다.

+0

발신자 주소를 위조하거나 해당 도메인에 허용되지 않는 서버를 사용하면 메일이 스팸으로 차단 될 수 있습니다. – CodesInChaos

+0

@CodeInChaos : 아니요. 모든 이메일이 전송되어 내받은 편지함 (및 기타받은 편지함)으로 전달되었습니다. 그들은 "보낸 사람"주소가 내가 원했던 주소 대신에 그들을 보내는 데 사용 된 GMail 계정과 동일합니다. 다른 smtp 서버로 전환하면 문제가 해결되었습니다. – MAK

+0

물론 Google이 보낸 SMTP가 변경된 메일은 SMTP 서버와 이메일이 일치하기 때문에 확인되었습니다. 그러나 당신이 그것을하지 않는 또 다른 smtp를 사용하면 메일에서 걸러 낼 수 있습니다. 특히'From' 필드에있는 이메일의 도메인이'SPF'를 사용한다면. – CodesInChaos

1

Gmail은 다른 어떤 주소도 허용하지 않습니다. 도움이 될 수도 있습니다.이 방법으로 재생을 변경할 수 있습니다.

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

관련 문제