一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - 使用C#編寫簡單的圖形化的可發送附件的郵件客戶端程序

使用C#編寫簡單的圖形化的可發送附件的郵件客戶端程序

2021-11-11 14:31鋒哥 C#

這篇文章主要介紹了使用C#編寫一個圖形化的可發送附件的郵件客戶端程序的方法,文中的示例同樣是基于支持smtp協議的郵件服務器,需要的朋友可以參考下

今天談一下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!
為了方便菜鳥理解,我把整個程序分成一下幾部分:

  • smtp服務信息設置
  • 驗證發件人信息
  • 添加附件
  • 正式發送郵件
  • 發送郵件后處理

OK 以下代碼伺候:
一些全局變量,都有注釋的

?
1
2
3
4
5
SmtpClient SmtpClient = null; //設置SMTP協議
MailAddress MailAddress_from = null; //設置發信人地址 當然還需要密碼
MailAddress MailAddress_to = null; //設置收信人地址 不需要密碼
MailMessage MailMessage_Mai = null;
FileStream FileStream_my = null; //附件文件流

1.smtp服務信息設置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#region 設置Smtp服務器信息
/// <summary>
/// 設置Smtp服務器信息
/// </summary>
/// <param name="ServerName">SMTP服務名</param>
/// <param name="Port">端口號</param>
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

2.驗證發件人信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#region 驗證發件人信息
/// <summary>
/// 驗證發件人信息
/// </summary>
/// <param name="MailAddress">發件郵箱地址</param>
/// <param name="MailPwd">郵箱密碼</param>
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

3.添加附件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#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

4.正式發送郵件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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");
 
}
}

5.發送郵件后處理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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

 

延伸 · 閱讀

精彩推薦
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
主站蜘蛛池模板: 久见久热 这里只有精品 | 果冻传媒天美传媒在线小视频播放 | 亚洲 欧美 制服 校园 动漫 | 免费观看在线 | 天天欲色成人综合网站 | 免费观看一级一片 | 日女人免费视频 | 欧美最猛性xxxxx短视频 | 久久AV喷吹AV高潮欧美 | 国内自拍网红在线自拍综合 | 秋霞一级| 久久精品国产免费播高清无卡 | 国产麻豆精品免费视频 | 精品久久久久久久国产潘金莲 | 久久成人精品免费播放 | 成人精品mv视频在线观看 | 国产日韩欧美精品在线 | 亚洲欧美精品一区二区 | 国产精品videosse | 2018亚洲男人天堂 | 情人我吃糖果小说 | 成年人视频免费在线观看 | jazz欧美人免费xxxxxx | 日本人护士免费xxxx视频 | 久久99re2在线视频精品 | 国产精品久久久久久网站 | 千金肉奴隶免费观看 | 亚洲国产日韩制服在线观看 | 国产精品福利一区二区亚瑟 | 99re热精品这里精品 | 欧美同性video | 国内精品中文字幕 | 99精品热线在线观看免费视频 | 小伙无套内射老女人 | 亚洲精选在线观看 | 国产精品视频一区二区三区w | 免费日本在线 | 国产视频中文字幕 | 性做久久久久久久久浪潮 | 丝瓜视频看污片 | 欧美视频在线一区 |