类似方式和帮助很多,这里结合自身使用时的一个Exception纪录下来。

code:

 1 //lbAttaches is a ListBox
 2        private void btnAttach_Click(object sender, EventArgs e)
 3        {
 4            DialogResult result = openFileDialog1.ShowDialog();
 5            if (result==DialogResult.OK)
 6            {
 7                foreach (string var in openFileDialog1.FileNames)
 8                {
 9                    lbAttaches.Items.Add(var);
10                }

11            }

12        }

13
14        private void btnRemoveAttach_Click(object sender, EventArgs e)
15        {
16            for (int i = 0; i < lbAttaches.SelectedItems.Count; i++)
17            {
18                lbAttaches.Items.Remove(lbAttaches.SelectedItems[i]);
19            }

20        }

21
22//这里没有处理多个地址的情况,可以使用常用的逗号分隔来加多个地址
23        private void btnSend_Click(object sender, EventArgs e)
24        {
25            MailMessage message=new MailMessage();
26            message.From=new MailAddress (txtFrom.Text);
27            
28            message.To .Add (txtTo.Text);
29            
30            message.CC.Add (txtCC.Text);
31            
32            if ( txtBCC .Text != "")
33             message.Bcc .Add (txtBCC.Text);
34
35            message.Subject=txtSubject.Text;
36            message.Body=txtBody.Text;
37            foreach (string var in lbAttaches.Items)
38            {
39                Attachment attachment=new Attachment(var);
40                message.Attachments.Add(attachment);
41            }

42
43            SmtpClient client = new SmtpClient(txtHost.Text);
44            client.Credentials = new NetworkCredential(this.txtUserName.Text , txtPassword.Text );
45            //client.UseDefaultCredentials = true;
46            client.Send(message);
47
48        }


 

特别注意的是,如果使用的是163的smtp.163.com,那么Credential的useName 必须与发件人的一致.否则会说异常
"

不允许使用邮箱名称。 服务器响应为: authentication is required...."