none
<急急急急>VS2005 C#寫多人寄信功能程式請教 RRS feed

  • 問題

  • 請教一下大大們,小弟我剛剛寫了一個寄信給多人的E-MAIL程式,但不知道為什麼只有後面有"COM"的郵件網址才能寄出,其他的MAIL都寄不出去,請大大幫我看看,我哪裡該改呢???

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Mime;
    using System.Net.Mail;
    using System.Collections;
    
    
    namespace Email
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
    
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
    
          msg.fromEmail = "*******@gmail.com";
          msg.fromName = "***";
          msg.from = new MailAddress(System.Text.Encoding.UTF8);
    
          System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@seed.net.tw");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****n@mail.ypu.edu.tw");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@gmail.com");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@mail.ypu.edu.tw");
          msg.To.Add("****@yahoo.com.tw");
          msg.To.Add("****@yahoo.com.tw");
          msg.To.Add("****@hotmail.com");
          /* 
           * 
           * msg.To.Add("b@b.com"); 
           * msg.To.Add("b@b.com");可以發送给多人 
           */
          msg.Subject = "專題信件";//郵件標題       
          msg.SubjectEncoding = System.Text.Encoding.UTF8;//郵件標題編碼 
          msg.Body = "各位老師好";//郵件內容 
          msg.BodyEncoding = System.Text.Encoding.UTF8;//郵件內容編碼
          msg.IsBodyHtml = false;//是否是HTML郵件 
          msg.Priority = MailPriority.High;//郵件先集 
    
          //SMTP的設置
          SmtpClient client = new SmtpClient();
          client.Host = "smtp.gmail.com";
          client.Port = 587;
          client.Credentials = new NetworkCredential("******@gmail.com", "************");
          client.EnableSsl = true;
          // 發送郵件
          client.SendAsync(mail, mail);
          // 發送 Compeleted Eevet
          client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
          object userState = msg;
          try
          {
            client.SendAsync(msg, userState);
            MessageBox.Show("發送成功");
          }
          catch (System.Net.Mail.SmtpException ex)
          {
            MessageBox.Show(ex.Message, "發送郵件錯誤");
          }
        }
      }
    }
    
    
    

    以下是我的程式碼!!!!

    2010年12月24日 下午 03:35

解答

  • 謝謝大大您的指點...但小弟想要的是按下按鈕後自動寄信的功能@@

    現再碰到一個問題...昨晚在打程式不知道是設定到什麼..原本單獨寄信都OK,但昨晚測試寄信時出現這個視窗...代表寄信沒成功,請問這是電腦設定的問題嗎?如果我把程式哪去跑別台電腦還會出現這問題嗎??   很擔心是程式碼有問題了= =

    system.Net.Mail.SmtpException:SMTP伺服器需要安全連線,或用戶端未經驗證。伺服器回應為:5.5.1Authentication Required.Learn more at

    於system.Net.Mail.SendMailAsyncResult.End(IAsyncResult result)

    於system.Net.Mail.SmtpTransport.EndSemdMail(IAsyncResult result)

    於system.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult result)


    您好

    您的問題一直在變,也不清楚您的程式碼是怎麼寫的,參考 [ASP.NET 3.5] 使用 Gmail 寄信, 請問下面程式錯在哪裡 ?

    裡面最後 lolota 提供的網址 [.NET Code] 在 .NET 程式中透過 Gmail 伺服器發信,電腦接 HiNet 網路的問題

    確認一下 Port 設定跟 SmtpClient.EnableSsl 屬性 : 指定 SmtpClient 是否使用 Secure Sockets Layer (SSL) 加密連線。

    http://msdn.microsoft.com/zh-tw/library/system.net.mail.smtpclient.enablessl.aspx


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 楓蘭小志 2010年12月26日 下午 06:37
    2010年12月25日 上午 03:20
    版主
  • System.Net.Mail.SmtpException:SMTP伺服器需要安全連線,或用戶端未經驗證。伺服器回應為:5.5.1Authentication Required.Learn more at
    如果你肯定帳密沒錯,有可能是你寄信的行為被 gMail 判定為廣告信,造成帳號封鎖。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 楓蘭小志 2010年12月26日 下午 06:37
    2010年12月25日 下午 12:55
  • 您好

    首先,你的程式碼 string toEmail = "<abc@yahoo.com.tw>","<abc@yahoo.com.tw>"; 這樣是有問題的

    另外,你的使用方式不正確,請參考以下程式碼

       //郵件設置
       string fromEmail = "*****@gmail.com";
       string fromName = "***";
       MailAddress from = new MailAddress(fromEmail, fromName, Encoding.UTF8);
       string toEmail = "<abc0@yahoo.com.tw>,<abc1@hotmail.com.tw>";
       MailMessage mail = new MailMessage();
       mail.From = from;
       mail.To.Add(toEmail);
       string subject = "Test Subject";
       mail.Subject = subject;
       mail.SubjectEncoding = Encoding.UTF8;
       string body = "老師您好";
       mail.Body = body;
       mail.BodyEncoding = Encoding.UTF8;
       mail.IsBodyHtml = false;
       mail.Priority = MailPriority.High;
       //實例化附件類
        Attachment amAnnex = new Attachment(@picbox.ImageLocation);
       mail.Attachments.Add(amAnnex);
       //SMTP的設置
       SmtpClient client = new SmtpClient();
       client.Host = "smtp.gmail.com";
       client.Port = 587;
       client.Credentials = new NetworkCredential("****@gmail.com", "*****");
       client.EnableSsl = true;
       // 發送郵件
       client.SendAsync(mail, mail);
    

     


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 楓蘭小志 2010年12月26日 下午 06:37
    2010年12月26日 下午 02:34
    版主

所有回覆

  • 您好

    可能被擋了,參考 請教信件被Queue住的問題。(ASP.NET 2.0)

    您有 mail.ypu.edu.tw 的帳號嗎? 將你的 smtp 改使用它再寄信看看


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月24日 下午 03:41
    版主
  • 大大您好!!

    您有 mail.ypu.edu.tw 的帳號嗎? 將你的 smtp 改使用它再寄信看看


    是指哪裡?
    2010年12月24日 下午 04:04
  • 意思是你不要用 google 寄信,改用你 ISP 業者提供的 SMTP Server 試試。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年12月24日 下午 04:16
  • 大大您好!!  

    我改這裡 會每個信都寄不出餒?

    client.Credentials = new NetworkCredential("*******@mail.ypu.edu.tw", "*****");

    2010年12月24日 下午 04:38
  • 你 Outlook 或是其他郵件軟體怎樣設定,程式碼就怎樣寫。

    一般 SMTP Server 並沒有用 SSL 寄信,也不支援跨網域寄信。

    小歐是猜測你可能被 gMail 鎖或是收件人數過多被擋,所以要你換別的 SMTP Server 發信。

    為了降低廣告信橫行,很多 SMTP Server 都有針對收件人總數設上限,比較細的還會分不同的 Server 。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年12月24日 下午 04:59
  • 我都是過了...但就是不行,不知道問題出在哪...那我請教大大們好了,我另外寫了個大家都會的寄信功能,那這樣怎嚜改才能一次寄多人EMAIL呢??拜託大大們幫幫忙。

    //郵件設置
              string fromEmail = "*****@gmail.com";
              string fromName = "***";
              MailAddress from = new MailAddress(fromEmail, fromName, Encoding.UTF8);
              string toEmail = sEmail;
              MailMessage mail = new MailMessage(from, new MailAddress(toEmail));
              string subject = "Test Subject";
              mail.Subject = subject;
              mail.SubjectEncoding = Encoding.UTF8;
              string body = "老師您好";
              mail.Body = body;
              mail.BodyEncoding = Encoding.UTF8;
              mail.IsBodyHtml = false;
              mail.Priority = MailPriority.High;
              //實例化附件類
              Attachment amAnnex = new Attachment(@picbox.ImageLocation);
              mail.Attachments.Add(amAnnex);
              //SMTP的設置
              SmtpClient client = new SmtpClient();
              client.Host = "smtp.gmail.com";
              client.Port = 587;
              client.Credentials = new NetworkCredential("****@gmail.com", "*****");
              client.EnableSsl = true;
              // 發送郵件
              client.SendAsync(mail, mail);
              // 發送 Compeleted Eevet
              client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
            }
          }
        }
        
        // 處理發送 Compeleted Eevet
        private void client_SendCompleted(object sender, AsyncCompletedEventArgs e)
        {
          if (e.Error != null)
          {
            MessageBox.Show(e.Error.ToString());
          }
          else
          {
            MessageBox.Show("Message sent.");
          }
        }
    
    2010年12月24日 下午 05:27
  • 您好

    假如您很急的話,請參考 [C#] (範例) 自製 Gmail, Live, Yahoo! .. .等 寄信系統 – Using System.Net.Mail Type

    應該符合您的需求又有原始碼


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月24日 下午 06:04
    版主
  • 謝謝大大您的指點...但小弟想要的是按下按鈕後自動寄信的功能@@

    現再碰到一個問題...昨晚在打程式不知道是設定到什麼..原本單獨寄信都OK,但昨晚測試寄信時出現這個視窗...代表寄信沒成功,請問這是電腦設定的問題嗎?如果我把程式哪去跑別台電腦還會出現這問題嗎??   很擔心是程式碼有問題了= =

    system.Net.Mail.SmtpException:SMTP伺服器需要安全連線,或用戶端未經驗證。伺服器回應為:5.5.1Authentication Required.Learn more at

    於system.Net.Mail.SendMailAsyncResult.End(IAsyncResult result)

    於system.Net.Mail.SmtpTransport.EndSemdMail(IAsyncResult result)

    於system.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult result)

    2010年12月25日 上午 02:24
  • 謝謝大大您的指點...但小弟想要的是按下按鈕後自動寄信的功能@@

    現再碰到一個問題...昨晚在打程式不知道是設定到什麼..原本單獨寄信都OK,但昨晚測試寄信時出現這個視窗...代表寄信沒成功,請問這是電腦設定的問題嗎?如果我把程式哪去跑別台電腦還會出現這問題嗎??   很擔心是程式碼有問題了= =

    system.Net.Mail.SmtpException:SMTP伺服器需要安全連線,或用戶端未經驗證。伺服器回應為:5.5.1Authentication Required.Learn more at

    於system.Net.Mail.SendMailAsyncResult.End(IAsyncResult result)

    於system.Net.Mail.SmtpTransport.EndSemdMail(IAsyncResult result)

    於system.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult result)


    您好

    您的問題一直在變,也不清楚您的程式碼是怎麼寫的,參考 [ASP.NET 3.5] 使用 Gmail 寄信, 請問下面程式錯在哪裡 ?

    裡面最後 lolota 提供的網址 [.NET Code] 在 .NET 程式中透過 Gmail 伺服器發信,電腦接 HiNet 網路的問題

    確認一下 Port 設定跟 SmtpClient.EnableSsl 屬性 : 指定 SmtpClient 是否使用 Secure Sockets Layer (SSL) 加密連線。

    http://msdn.microsoft.com/zh-tw/library/system.net.mail.smtpclient.enablessl.aspx


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 楓蘭小志 2010年12月26日 下午 06:37
    2010年12月25日 上午 03:20
    版主
  • System.Net.Mail.SmtpException:SMTP伺服器需要安全連線,或用戶端未經驗證。伺服器回應為:5.5.1Authentication Required.Learn more at
    如果你肯定帳密沒錯,有可能是你寄信的行為被 gMail 判定為廣告信,造成帳號封鎖。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 楓蘭小志 2010年12月26日 下午 06:37
    2010年12月25日 下午 12:55
  • 1. 一次只寄一個對象, 而不是一次寄給一大堆人

    2. 每封信的 subject 的文字都稍為改一下 (可以試試隨機填入任意英文字母)

    3. 使用不同的 SMTP 伺服器(如果有的話)

    如果採用以上做法就可以順利寄出去的話, 就代表問題是出在 SMTP 伺服器, 而不是程式本身的問題。

    如果是我的話, 我會自己架一個 SMTP Server (使用 IIS 即可, 或者可以在網路上找到免費的軟體)。但是如果你的寄信習慣不改, 還是很快就會被別人封鎖。

     


    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny
    2010年12月26日 上午 07:22
  • 大大們好!!!

    沒錯 我查證過ㄌ是我的帳號被認為寄廣告信件所以被封鎖了,而我改帳號果然OK

    所以這部分我已經搞好了

    那想請教一下大大們,我原本的寄信功能

    因為我之前的作法是用收尋的方式去收尋資料夾內所有的E-MAIL網址後做寄信

    而現再我要做一個寄信功能是,直接按下按鈕就會自動寄出我所有的信件網址,也就是說要把所有的網址寫死在程式碼中...

    但為什麼都只計一封呢??窩該怎嚜改??   請教一下...

    2010年12月26日 上午 11:09
  • 大大們好!!!

    沒錯 我查證過ㄌ是我的帳號被認為寄廣告信件所以被封鎖了,而我改帳號果然OK

    所以這部分我已經搞好了

    那想請教一下大大們,我原本的寄信功能

    因為我之前的作法是用收尋的方式去收尋資料夾內所有的E-MAIL網址後做寄信

    而現再我要做一個寄信功能是,直接按下按鈕就會自動寄出我所有的信件網址,也就是說要把所有的網址寫死在程式碼中...

    但為什麼都只計一封呢??窩該怎嚜改??   請教一下...


    您好

    現在你的程式碼怎麼寫的?


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月26日 下午 12:21
    版主
  • //郵件設置
         string fromEmail = "*****@gmail.com";
         string fromName = "***";
         MailAddress from = new MailAddress(fromEmail, fromName, Encoding.UTF8);
         string toEmail = "<abc@yahoo.com.tw>","<abc@yahoo.com.tw>";
         MailMessage mail = new MailMessage(from, new MailAddress(toEmail));
         string subject = "Test Subject";
         mail.Subject = subject;
         mail.SubjectEncoding = Encoding.UTF8;
         string body = "老師您好";
         mail.Body = body;
         mail.BodyEncoding = Encoding.UTF8;
         mail.IsBodyHtml = false;
         mail.Priority = MailPriority.High;
         //實例化附件類
         Attachment amAnnex = new Attachment(@picbox.ImageLocation);
         mail.Attachments.Add(amAnnex);
         //SMTP的設置
         SmtpClient client = new SmtpClient();
         client.Host = "smtp.gmail.com";
         client.Port = 587;
         client.Credentials = new NetworkCredential("****@gmail.com", "*****");
         client.EnableSsl = true;
         // 發送郵件
         client.SendAsync(mail, mail);
         // 發送 Compeleted Eevet
         client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
        }
       }
      }
      
      // 處理發送 Compeleted Eevet
      private void client_SendCompleted(object sender, AsyncCompletedEventArgs e)
      {
       if (e.Error != null)
       {
        MessageBox.Show(e.Error.ToString());
       }
       else
       {
        MessageBox.Show("Message sent.");
       }
      }
    
    
    2010年12月26日 下午 01:43
  • 您好

    首先,你的程式碼 string toEmail = "<abc@yahoo.com.tw>","<abc@yahoo.com.tw>"; 這樣是有問題的

    另外,你的使用方式不正確,請參考以下程式碼

       //郵件設置
       string fromEmail = "*****@gmail.com";
       string fromName = "***";
       MailAddress from = new MailAddress(fromEmail, fromName, Encoding.UTF8);
       string toEmail = "<abc0@yahoo.com.tw>,<abc1@hotmail.com.tw>";
       MailMessage mail = new MailMessage();
       mail.From = from;
       mail.To.Add(toEmail);
       string subject = "Test Subject";
       mail.Subject = subject;
       mail.SubjectEncoding = Encoding.UTF8;
       string body = "老師您好";
       mail.Body = body;
       mail.BodyEncoding = Encoding.UTF8;
       mail.IsBodyHtml = false;
       mail.Priority = MailPriority.High;
       //實例化附件類
        Attachment amAnnex = new Attachment(@picbox.ImageLocation);
       mail.Attachments.Add(amAnnex);
       //SMTP的設置
       SmtpClient client = new SmtpClient();
       client.Host = "smtp.gmail.com";
       client.Port = 587;
       client.Credentials = new NetworkCredential("****@gmail.com", "*****");
       client.EnableSsl = true;
       // 發送郵件
       client.SendAsync(mail, mail);
    

     


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 楓蘭小志 2010年12月26日 下午 06:37
    2010年12月26日 下午 02:34
    版主
  •  string toEmail = "<abc0@yahoo.com.tw>,<abc1@hotmail.com.tw>";
    
    抱歉我剛剛打錯,abc另一個abcd,如果都是YAHOO的可以嗎?
    
    復件那也先不要  等可以寄信了在弄。
    
    大大您上面改的那程式可以寄信給多人ㄌ媽???
    
    2010年12月26日 下午 02:51
  • 您好

    1. 你可以不用 <> 例如

    string toEmail = "abc0@yahoo.com.tw,abc1@yahoo.com.tw";

    2. 我測試過了,可以寄多人(信箱打對就可以)

    3. 你怎麼不先測試看看??


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月26日 下午 03:18
    版主
  • 大大您上面改的那程式可以寄信給多人ㄌ媽???

    問題在你的 SMTP Server 。

    全球都在擋廣告信,不管換啥都一樣,連續發送你會直接被 ISP 業者封鎖,讓你一台 SMTP Server 都連不上。

     

    把廣告信相關討論看一看:

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=%e5%bb%a3%e5%91%8a%e4%bf%a1


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年12月26日 下午 03:23
  • 但我昨天試已經OKㄌ!! 我不是寄很多信給人家,我是專案程式執行後做多人寄信的效果..

    而且真奇怪 我也測試沒幾次阿!!!!

    2010年12月26日 下午 04:09
  • 但我昨天試已經OKㄌ!! 我不是寄很多信給人家,我是專案程式執行後做多人寄信的效果..

    而且真奇怪 我也測試沒幾次阿!!!!


    您好

    我測試過你這樣的寫法,只會寄第一封

         string toEmail = "<abc@yahoo.com.tw>","<abc@yahoo.com.tw>";
         MailMessage mail = new MailMessage(from, new MailAddress(toEmail));

    有改成使用以下寫法測試過了嗎? 我改完就可以寄多封了

      string toEmail = "<abc0@yahoo.com.tw>,<abc1@hotmail.com.tw>";
       MailMessage mail = new MailMessage();
       mail.From = from;
       mail.To.Add(toEmail);


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月26日 下午 04:14
    版主
  • 如果是自己寄給自己,請使用 ISP 業者提供的信箱,或單位內的 SMTP Server。

    ISP 業者通常是有人檢舉才會警告、封鎖。

    gMail 是有機器人在判讀,所以只要符合 gMail 的規則,就會被判定為惡意行為。

     

    我自己就有好幾個系統是透過 eMail 夾附件交流資訊,都沒被擋過。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年12月26日 下午 04:47