C#發送帶附件的電子郵件

          今天談一下C#(WinForm)如何發送帶附件的電子郵件!廢話少說,先截圖伺候:

          C#發送帶附件的電子郵件

          首先C#發送郵件需要smtp服務的支持,我也不知道是不是C#只支持smtp協議,不過好像在MSDN里,Mail這個命名空間下只有介紹smtp的方法的,好像沒看到POP的,算了,先不要說這個

          我們暫時用smtp協議來做就好了!因此首先你要確保你的發件郵箱支持smtp服務,據我說知,雅虎郵箱,HotMail郵箱和GMail郵箱都不支持smtp的,不過沒事,還好我們常用的QQ郵箱,163郵箱,新浪郵箱等郵箱都支持smtp的,這樣我們就可以用這些郵箱來發郵件了,哈哈,不過QQ郵箱的smtp服務默認是關閉的,需要我們手動去開通,開通很簡單,進入你的QQ郵箱后,選擇【設置】,在賬戶選項卡里就有個smtp的復選框,打個勾保存一下就OK了。163郵箱和新浪郵箱開通smtp服務也差不多這樣的,很簡單。好了 開通好了接下來就開始來講代碼了 OK!
          為了方便菜鳥理解,我把整個程序分成一下幾部分:

          1. smtp服務信息設置
          2. 驗證發件人信息
          3. 添加附件
          4. 正式發送郵件
          5. 發送郵件后處理

          OK 以下代碼伺候:
          一些全局變量,都有注釋的
          [code lang=”csharp”]SmtpClient SmtpClient = null; ? //設置SMTP協議
          MailAddress MailAddress_from = null; //設置發信人地址 ?當然還需要密碼
          MailAddress MailAddress_to = null; ?//設置收信人地址 ?不需要密碼
          MailMessage MailMessage_Mai = null;
          FileStream FileStream_my = null; //附件文件流[/code]

          1.smtp服務信息設置

          [code lang=”csharp”]#region 設置Smtp服務器信息
          ///

          /// 設置Smtp服務器信息
          ///

          /// SMTP服務名/// 端口號private void setSmtpClient(string ServerHost, int Port)
          {
          SmtpClient = new SmtpClient();
          SmtpClient.Host = ServerHost;//指定SMTP服務名 ?例如QQ郵箱為 smtp.qq.com 新浪cn郵箱為 smtp.sina.cn等
          SmtpClient.Port = Port; //指定端口號
          SmtpClient.Timeout = 0; ?//超時時間
          }
          #endregion[/code]

          2.驗證發件人信息

          [code lang=”csharp”]#region 驗證發件人信息
          ///

          /// 驗證發件人信息
          ///

          /// 發件郵箱地址/// 郵箱密碼private void setAddressform(string MailAddress, string MailPwd)
          {
          //創建服務器認證
          NetworkCredential NetworkCredential_my = new NetworkCredential(MailAddress, MailPwd);
          //實例化發件人地址
          MailAddress_from = new System.Net.Mail.MailAddress(MailAddress, textBoxX4.Text);
          //指定發件人信息 ?包括郵箱地址和郵箱密碼
          SmtpClient.Credentials = new System.Net.NetworkCredential(MailAddress_from.Address, MailPwd);
          ;
          }
          #endregion[/code]

          3.添加附件

          [code lang=”csharp”]#region 檢測附件大小
          private bool Attachment_MaiInit(string path)
          {
          try
          {
          FileStream_my = new FileStream(path, FileMode.Open);
          string name = FileStream_my.Name;
          int size = (int)(FileStream_my.Length / 1024/1024);
          FileStream_my.Close();
          //控制文件大小不大于10M
          if (size > 10)
          {
          MessageBox.Show(“文件長度不能大于10M!你選擇的文件大小為”+ size.ToString()+”M”,”警告”,MessageBoxButtons.OK,MessageBoxIcon.Warning);
          return false;
          }
          return true;
          }
          catch (IOException E)
          {
          MessageBox.Show(E.Message);
          return false;
          }
          }

          #endregion[/code]

          4.正式發送郵件

          [code lang=”csharp”] ?private void btnSend_Click(object sender, EventArgs e)
          {
          //檢測附件大小 發件必需小于10M 否則返回 ?不會執行以下代碼
          if (txt_Path.Text != “”)
          {
          if (!Attachment_MaiInit(txt_Path.Text.Trim()))
          {
          return;
          }
          }
          if (txt_SmtpServer.Text == “”)
          {
          MessageBox.Show(“請輸入SMTP服務器名!”, “提示”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
          return;
          }
          if (textBoxX2.Text == “”)
          {
          MessageBox.Show(“請輸入發件人郵箱地址!”, “提示”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
          return;
          }
          if (txtformPwd.Text == “”)
          {
          MessageBox.Show(“請輸入發件人郵箱密碼!”, “提示”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
          return;
          }
          if (dataGridViewX1.Rows.Count == 0)
          {
          MessageBox.Show(“請添加收件人!”, “提示”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
          return;
          }
          if (MessageBox.Show(“您確定要發送當前郵件嗎?”, “詢問”, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
          {
          try
          {
          //初始化Smtp服務器信息
          setSmtpClient(“smtp.” + txt_SmtpServer.Text.Trim() + comboBoxEx3.Text, Convert.ToInt32(numericUpDown1.Value));
          }
          catch (Exception Ex)
          {
          MessageBox.Show(“郵件發送失敗,請確定SMTP服務名是否正確!” + “\n” + “技術信息:\n” + Ex.Message, “錯誤”, MessageBoxButtons.OK, MessageBoxIcon.Error);
          return;
          }
          try
          {
          //驗證發件郵箱地址和密碼
          setAddressform(textBoxX2.Text.Trim() + comboBoxEx2.Text, txtformPwd.Text.Trim());
          }
          catch (Exception Ex)
          {
          MessageBox.Show(“郵件發送失敗,請確定發件郵箱地址和密碼的正確性!” + “\n” + “技術信息:\n” + Ex.Message, “錯誤”, MessageBoxButtons.OK, MessageBoxIcon.Error);
          return;
          }
          //清空歷史發送信息 以防發送時收件人收到的錯誤信息(收件人列表會不斷重復)
          MailMessage_Mai.To.Clear();
          //添加收件人郵箱地址
          foreach (DataGridViewRow row in dataGridViewX1.Rows)
          {
          MailAddress_to = new MailAddress(row.Cells[“Column1”].Value.ToString());
          MailMessage_Mai.To.Add(MailAddress_to);
          }
          MessageBox.Show(“收件人:” + dataGridViewX1.Rows.Count.ToString() + ” ?個”);
          //發件人郵箱
          MailMessage_Mai.From = MailAddress_from;

          //郵件主題
          MailMessage_Mai.Subject = txttitle.Text;
          MailMessage_Mai.SubjectEncoding = System.Text.Encoding.UTF8;

          //郵件正文
          MailMessage_Mai.Body = Rtb_Message.Text;
          MailMessage_Mai.BodyEncoding = System.Text.Encoding.UTF8;

          //清空歷史附件 ?以防附件重復發送
          MailMessage_Mai.Attachments.Clear();

          //添加附件
          MailMessage_Mai.Attachments.Add(new Attachment(txt_Path.Text.Trim(), MediaTypeNames.Application.Octet));

          //注冊郵件發送完畢后的處理事件
          SmtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);

          //開始發送郵件
          SmtpClient.SendAsync(MailMessage_Mai, “000000000”);

          }
          }[/code]

          5.發送郵件后處理

          [code lang=”csharp”]#region 發送郵件后所處理的函數
          private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
          {
          try
          {
          if (e.Cancelled)
          {
          MessageBox.Show(“發送已取消!”);
          }
          if (e.Error != null)
          {
           
          MessageBox.Show(“郵件發送失??!” + “\n” + “技術信息:\n” + e.ToString(), “錯誤”, MessageBoxButtons.OK, MessageBoxIcon.Error);
           
          }
          else
          {
          MessageBox.Show(“郵件成功發出!”, “恭喜!”, MessageBoxButtons.OK, MessageBoxIcon.Information);
          }
          }
          catch (Exception Ex)
          {
          MessageBox.Show(“郵件發送失??!” + “\n” + “技術信息:\n” + Ex.Message, “錯誤”, MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
           
          }
          #endregion[/code]
          好了就這么多了 很詳細吧! 歡迎大家留言交流。

          本博客所有文章如無特別注明均為原創

          如果覺得對你有幫助,可以通過下方打賞對作者表示鼓勵

          本文采用知識共享署名-非商業性使用-相同方式共享

          如若轉載,請注明出處:《C#發送帶附件的電子郵件》http://www.solariosolutions.com/173.html

          (0)
          打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
          鋒哥的頭像鋒哥管理員
          上一篇 2013年5月10日 11:30
          下一篇 2013年5月14日 13:37

          相關推薦

          發表回復

          登錄后才能評論
          国产厨房乱子伦露脸,XXXXAAA欧美,日本 888 XXXX,国产欧美日韩一区二区图片