2010-11-22 8 views
1

System.Net.Mailを使用する単純なメール送信者クラスを使用しています。私はさまざまなユーザーが(同じsmtpアカウントを使用して)それを介して電子メールを送信できるようにアプリケーションを更新する必要がありますが、 "送信元"アドレスはその送信元のユーザーである必要があります。 FromプロパティをMailMessageに設定し、そのアドレスをMailMessageのコンストラクタに送信しましたが、動作しているもののノーズです。私は、メールAPIの仕組みを理解していない、あるいは単純なことが不足していると確信しています。誰も助けることができますか?C#を使用してGmail経由で送信されたメールの別の「送信元」アドレスを設定する

ここでは、基本的にMailMessageNetworkCredential、およびをラップする私のMailSenderクラスは、1つの単純なメール送信インターフェイスを提供します。

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

Googleは、認証のために渡した認証情報以外のアカウントからメールを送信することを許可しない可能性が非常に高いかもしれません。 –

+0

@leppieと@Mikael Svenson:オフィスのsmtpでも試してみました。同じ結果。 – MAK

答えて

3

私はちょうど別のSMTPサーバーでテストして答えを見つけました。これは実際にGMailがアドレスからの他のものを許可しないことによって引き起こされます。これは他のSMTPサーバーでうまく動作します。

leppie、Mikael Svenson、smirkingmanに感謝します。

+0

送信者のアドレスを偽造したり、そのドメインに許可されていないサーバーを使用すると、メールが迷惑メールとしてブロックされる可能性があります。 – CodesInChaos

+0

@CodeInChaos:いいえ。すべてのメールが送信され、受信トレイ(および他の受信トレイ)に送られました。彼らはちょうど私が持っていたが、アドレスの代わりにそれらを送信するために使用されたGMailアカウントと同じ "から"アドレスを持っていた。別のsmtpサーバーに切り替えると、問題が取り除かれました。 – MAK

+0

もちろん、グーグルが「From」を変更したメールは、smtpサーバーと電子メールが一致してからは大丈夫でした。しかし、あなたがそれをしない別のsmtpを使用すると、メールの内容がフィルタリングされる可能性があります。特に、「From」フィールドの電子メールのドメインが「SPF」を使用する場合。 – CodesInChaos

1

Gmailは他のアドレスを許可していません。 それはあなたに役立つかもしれません、このように再生を変更することができます:

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

関連する問題