使用C#,輕鬆發郵件

來源:互聯網
上載者:User

     很早的時候,大概是剛學習C#那會兒,就很想使用C#來發送自己的郵件,可是一直在網上都沒有找到合適的代碼,前陣子有幾個哥們兒在做Socket編程,一個區域網路辦公管理軟體,我就跟著看了看,主要實現了區域網路聊天、檔案傳輸、視頻和音頻聊天等功能,這個時侯我忽然又很想寫一個發送郵件的軟體了。沒辦法,只能再次一點一點的學習,在查了幾次MSDN之後,居然讓我給實現了,並且感覺還是蠻好用的,所以就拿出來給園友分享一下,寫的不夠清楚的地方,您就多多包含了,如果對你還有點協助,那就麻煩頂一下了。。。閑話就到這裡,馬上開始!

 

      先做一個Windows應用程式,把介面設計成這個樣子:

 

圖1、程式設計介面

     下面來一一介紹介面的控制項:

     1、在寄件者資訊的groupbox中,先是一個下拉式清單,用來選擇SMTP伺服器,SMTP伺服器是為你提供發送郵件的伺服器,如果你使用的是163郵箱,那麼SMTP伺服器就是smtp.163.com;如果是Gmail,那麼SMTP伺服器就是smpt.gmail.com。使用者名稱是你在登陸該郵箱的名稱,比如我有一個gmail帳號youring2@gmail.com,那麼這裡就應該填寫youring2。要顯示的姓名是郵件接收方能夠看到的姓名,你可以隨便填寫,比如我想讓收件者知道這封郵件來自齊飛,那麼我這裡就填寫齊飛,這是一個非必選項,可以不填寫。郵箱密碼就是你的郵箱密碼,是123就填寫123,是456就填寫456,我這裡就不公開我的郵箱密碼了。

     2、在收件者資訊的groupbox中,收件者姓名為要收到這封郵件人的姓名,可以填寫,也可以不填。例如我這封信是寫給youring2的,我就可以在這裡填寫youring2。Email是收件者的地址,如果我要發給youring2的163郵箱,我就可以填寫youring2@163.com。這個是一定要寫的,原因我就不說了。。。

     3、郵件資訊裡面首先是主題,然後是附件,再然後是內容,這裡不再多說。點擊添加按鈕來添加附件,點擊刪除按鈕刪除選中的附件,點擊發送將郵件發送出去。

如果你的介面設計水平已經很厲害了,那麼就自己設計一個介面,直接到下面的代碼設計!

 

      你需要添加命名空間: using System.Net.Mail;
                                   using System.Net.Mime;
                                   using System.Net;
                                   using System.IO;      

      第一步,添加一個Form Load事件。在這個事件的代碼裡,主要實現表單初始化的工作。這些代碼同樣可以放在Form的建構函式中完成。

        private void Form1_Load(object sender, EventArgs e)
        {
            //添加倆個smpt伺服器的名稱
            cmbBoxSMTP.Items.Add("smtp.163.com");
            cmbBoxSMTP.Items.Add("smtp.gmail.com");
            //設定為下拉式清單
            cmbBoxSMTP.DropDownStyle = ComboBoxStyle.DropDownList;
            //預設選中第一個選項
            cmbBoxSMTP.SelectedIndex = 0;
            //在下面添加你想要初始化的內容,比如顯示姓名、使用者名稱等

        }

     第二步,添加一個"添加"按鈕的單擊事件。用來實現選擇檔案,並把檔案添加到TreeView中。

        //添加按鈕的單擊事件
        private void btnAdd_Click(object sender, EventArgs e)
        {
            //定義並初始化一個OpenFileDialog類的對象
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.InitialDirectory = Application.StartupPath;
            openFile.FileName = "";
            openFile.RestoreDirectory = true;
            openFile.Multiselect = false;

            //顯示開啟檔案對話方塊,並判斷是否單擊了確定按鈕
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                //得到選擇的檔案名稱
                string fileName = openFile.FileName;
                //將檔案名稱添加到TreeView中
                treeViewFileList.Nodes.Add(fileName);
            }
        }

     第三步,添加一個"刪除"按鈕的單擊事件,用來實現選中一個TreeView項後,把該選項刪除掉。

        //刪除按鈕的單擊事件
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //判斷是否選中了節點
            if (treeViewFileList.SelectedNode != null)
            {
                //得到選擇的節點
                TreeNode tempNode = treeViewFileList.SelectedNode;
                //刪除選中的節點
                treeViewFileList.Nodes.Remove(tempNode);
            }
            else
            {
                MessageBox.Show("請選擇要刪除的附件。");
            }
        }

     第四步,也是最關鍵的一步,"發送"按鈕的單擊事件,用來實現發送郵件功能。

        //發送按鈕的單擊事件
        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                //確定smtp伺服器位址。執行個體化一個Smtp用戶端
                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(cmbBoxSMTP.Text);
                //產生一個發送地址
                string strFrom = string.Empty;
                if (cmbBoxSMTP.SelectedText == "smtp.163.com")
                    strFrom = txtUserName.Text + "@163.com";
                else
                    strFrom = txtUserName.Text + "@gmail.com";

                //構造一個寄件者地址對象
                MailAddress from = new MailAddress(strFrom, txtDisplayName.Text, Encoding.UTF8);
                //構造一個收件者地址對象
                MailAddress to = new MailAddress(txtEmail.Text, txtToName.Text, Encoding.UTF8);

                //構造一個Email的Message對象
                MailMessage message = new MailMessage(from, to);

                //為 message 添加附件
                foreach (TreeNode treeNode in treeViewFileList.Nodes)
                {
                    //得到檔案名稱
                    string fileName = treeNode.Text;
                    //判斷檔案是否存在
                    if (File.Exists(fileName))
                    {
                        //構造一個附件對象
                        Attachment attach = new Attachment(fileName);
                        //得到檔案的資訊
                        ContentDisposition disposition = attach.ContentDisposition;
                        disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
                        disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
                        disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
                        //向郵件添加附件
                        message.Attachments.Add(attach);
                    }
                    else
                    {
                        MessageBox.Show("檔案" + fileName + "未找到!");
                    }
                }

                //添加郵件主題和內容
                message.Subject = txtSubject.Text;
                message.SubjectEncoding = Encoding.UTF8;
                message.Body = rtxtBody.Text;
                message.BodyEncoding = Encoding.UTF8;

                //設定郵件的資訊
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                message.BodyEncoding = System.Text.Encoding.UTF8;
                message.IsBodyHtml = false;

                //如果伺服器支援安全連線,則將安全連線設為true。
                //gmail支援,163不支援,如果是gmail則一定要將其設為true
                if (cmbBoxSMTP.SelectedText == "smpt.163.com")
                    client.EnableSsl = false;
                else
                    client.EnableSsl = true;

                //設定使用者名稱和密碼。
                //string userState = message.Subject;
                client.UseDefaultCredentials = false;
                string username = txtUserName.Text;
                string passwd = txtPassword.Text;
                //使用者登陸資訊
                NetworkCredential myCredentials = new NetworkCredential(username, passwd);
                client.Credentials = myCredentials;
                //發送郵件
                client.Send(message);
                //提示發送成功
                MessageBox.Show("發送成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

 

下面是我的運行結果:

圖2、發送Email

現在開啟我的Gmail郵箱,看看是不是已經收到的郵件,我果然收到了,不信你看:

圖3、收件匣查看郵件

 

     看到了吧,就是這麼簡單,趕緊動手自己做一個!最後需要說明一點,這裡用的是Send方法進行發送的,你也可以使用SendAsync方法來發送郵件,如果採用了非同步,你就需要設定一個回呼函數來處理髮送完成以後的工作,我這裡偷懶了啊!我現在有兩個樣本,一個是同步的,就是上面說的這個,還有一個是採用非同步方式發送的,如果你需要原始碼,點擊這裡下載:SendEmail.rar。 感謝你能夠看到最後,謝謝!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.