2012-01-20 6 views
0

私はC#から電子メールを送信するいくつかのプログラムを書いています。これはwinXPでもうまくいきますが、Win7で壊れています。私が理解しているのは、私が参照しているSMTPサーバが別のコンピュータ上にあっても、送信側のコンピュータにはSMTPサービスがインストールされている必要があります(そしてwin7はありません)。SMTP電子メール "サービス" C#プロジェクトに含めることができますか?

サードパーティ製のSMTPサーバーをインストールすることは可能ですが、プログラムを実行しているすべてのコンピュータでこれを行う必要があります。代わりに、私は同じ仕事をするためにコードから完全に使うことができる私のプロジェクトに一時的なSMTPサーバを含めたいと思います。誰かが私のプロジェクトに一時的なSMTPサーバーを含める方法について、ライブラリ(またはサンプルコード)を知っていますか?

は、ここに私のコードです:

public static void sendEmail(String[] recipients, String sender, String subject, String body, String[] attachments) 
    { 
      MailMessage message; 

      try 
      { 
       message = new MailMessage(sender, recipients[0]); 
      } 
      catch (Exception) 
      { 
       return; 
      } 

      foreach (String s in recipients) 
      { 
       if (!message.To.Contains(new MailAddress(s))) 
        message.To.Add(s); 
      } 

      message.From = new MailAddress(sender); 
      message.Subject = subject; 
      message.Body = body; 
      message.IsBodyHtml = true; 
      SmtpClient smtp = new SmtpClient("PRIVATE.PRIVATE.PRIVATE", 25); 
      smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 
      //smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 

      smtp.UseDefaultCredentials = true; 

      if (attachments.Length > 0) 
      { 
       foreach (String a in attachments) 
       { 
        message.Attachments.Add(new Attachment(a)); 
       } 
      } 
      try 
      { 
       smtp.SendAsync(message, null); 

答えて

2

を送信するには、にローカルSMTPサービスが必要です。 System.Net.Mailライブラリが必要です。リモートSMTPサーバー(有効なPTR設定を使用し、スパマーと見なされることを避けるために、有効なPTR設定を使用し、ネットワーク内にないSMTPサーバーを使用することは間違いありません)。

+0

- なぜ、これはXPで動作し、Win7では動作しないのですか? – MAW74656

+0

あなたのスクリプトを教えてください。たぶんあなたは何とかローカルSMTPサービスを使用しています。別の理由は、ローカルプログラムが電子メールを送信することを許可しないファイアウォールかもしれません。 – Olaf

+0

- 上記のコードは、XPでは動作しますが、7では動作しません。 – MAW74656

1

私は組み込み可能なSMTPサーバを発見したことはありませんが、これらの両方が近くにあり、あなたはおそらく、あなたのニーズに合うようにそれらを修正することができます。

http://www.codeproject.com/KB/IP/smtppop3mailserver.aspx

http://www.ericdaugherty.com/dev/cses/developers.html

私は、これはまた、私は便利だろうなものであるので、探し続けるつもりです。もし私が見つけたら、私はもっと投稿します。

0

App.configファイルでSMTP設定を指定しようとしましたか?ような何か:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
     <mailSettings> 
      <smtp deliveryMethod="Network"> 
       <specifiedPickupDirectory pickupDirectoryLocation="C:\tmp"/> 
       <network host="smtp.example.com"/> 
      </smtp> 
     </mailSettings> 
    </system.net> 
</configuration> 

あなたがdeliveryMethod="SpecifiedPickupDirectory"を変更した場合、それはちょうどあなたが指定したディレクトリに送信される電子メールを表すファイルを記述します。

これが役に立ちます。

+0

- 電子メールをファイルに書き込むのに役立つものではありません。私はそれを送る必要があります。 – MAW74656

+0

電子メールを送信するには、deliveryMethod = "Network"のままにして、タグで正しいホストを指定してください。 –

+0

- 上記のコードをご覧ください。このコードはXPでは動作しますが、Win7では動作しません。 – MAW74656

2

資格情報の問題が考えられます。 SendAsyncをSendに変更して、例外が発生していないかどうかを確認します。それとも、あなたは間違いになってしまいますあなたの電子メールを送信するために未設定のサービスを使用する場合はwin7の

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); 
//smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtp.Credentials = new NetworkCredential(GoogleUserEmail, GooglePassword); 
smtp.EnableSsl = true; 

// smtp.UseDefaultCredentials = true; 

if (attachments != null && attachments.Length > 0) 
     { 
      foreach (String a in attachments) 
      { 
       message.Attachments.Add(new Attachment(a)); 
      } 
     } 
     try 
     { 
      smtp.Send(message); 
     } 
+0

元の方法でWin7で実行するとエラーが発生しますか? – MAW74656

0

に私の作品、あなたのコードに変更を以下の非同期呼び出し

smtp.SendCompleted += delegate(object s, System.ComponentModel.AsyncCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     System.Diagnostics.Trace.TraceError(e.Error.ToString()); 
    } 
}; 

のハンドラを追加DNSの逆引きとSPFチェックが失敗したためにSPAMフォルダに移動しました。したがって、サーバーを適切に構成する必要があります。あるいは、Elastic Emailのようなサードパーティのサービスを使用することもできます。 HTTPを使用してメールを送信するElastic Emailのサンプルコードは次のとおりです。

public static string SendEmail(string to, string subject, string bodyText, string bodyHtml, string from, string fromName) 
    { 

     WebClient client = new WebClient(); 
     NameValueCollection values = new NameValueCollection(); 
     values.Add("username", USERNAME); 
     values.Add("api_key", API_KEY); 
     values.Add("from", from); 
     values.Add("from_name", fromName); 
     values.Add("subject", subject); 
     if (bodyHtml != null) 
      values.Add("body_html", bodyHtml); 
     if (bodyText != null) 
      values.Add("body_text", bodyText); 
     values.Add("to", to); 

     byte[] response = client.UploadValues("https://api.elasticemail.com/mailer/send", values); 
     return Encoding.UTF8.GetString(response); 
    } 
関連する問題