C#,WinForm发送邮件

来源:互联网 发布:catia软件培训 编辑:程序博客网 时间:2024/06/13 02:58
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.Sockets;namespace SendMail{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            for (int i = 0; i < 20; i++)            {                            string [] recs = rec.Text.Split(';');            bool isyes =  SendMail(server.Text, 25, this.txt_account.Text, recs, this.subject.Text, this.content.Text, true, this.txt_pwd.Text);              }            //if (isyes)            //{            //    MessageBox.Show("邮件发送成功");            //}        }        NetworkStream ns;        /// <summary>        ///         /// </summary>        /// <param name="smtpServer">smtp服务器</param>        /// <param name="point">发送端口</param>        /// <param name="_from">发件人</param>        /// <param name="_tos">收件人</param>        /// <param name="_subject">主题</param>        /// <param name="_content">内容</param>        /// <param name="isESMTP">是否需要身份验证</param>               /// <param name="userPWD">发件人密码</param>               /// <returns></returns>        public bool SendMail(string smtpServer, int point, string _from, string[] _tos, string _subject, string _content, bool isESMTP, string userPWD)        {            try            {                TcpClient smtpClient = new TcpClient();                IPAddress ip = Dns.GetHostAddresses(smtpServer)[0];                smtpClient.Connect(ip, point);//连接服务器                ns = smtpClient.GetStream();                if (SMTPReceive() != 220)                    return false;                Send("HELO/r/n");                if (SMTPReceive() != 250)                    return false;                //身份验证                if (isESMTP)                {                    Send("AUTH LOGIN/r/n");                    if (SMTPReceive() != 334)                        return false;                    string uname=_from.Substring(0,_from.IndexOf('@'));                    Send(ConvertToBase64(uname) + "/r/n");                    if (SMTPReceive() != 334)                        return false;                    Send(ConvertToBase64(userPWD) + "/r/n");                    if (SMTPReceive() != 235)                        return false;                }                Send("Mail From:<" + _from + ">/r/n");//发件人                if (SMTPReceive() != 250)                    return false;                if (_tos.Length < 0)                    return false;                foreach (string to in _tos)                {                    Send("RCPT TO:<" + to + ">/r/n");                    if (SMTPReceive() != 250)                        return false;                }                Send("DATA /r/n");                if (SMTPReceive() != 354)                    return false;                StringBuilder content = new StringBuilder();                             content.Append("From:" + _from + "/r/n");                if (_tos.Length <= 0)                    return false;                foreach (string to in _tos)                {                    content.AppendFormat("To:{0}/r/n", to);                }                              //邮件标题                content.AppendFormat("Subject:{0}/r/n", _subject);                //邮件编码格式                content.AppendFormat("Charset=/"{0}/"/r/n", "gb2312");                content.Append("/r/n");                content.Append(_content);//追加发送的内容                content.Append("/r/n./r/n");                Send(content.ToString());                if (SMTPReceive() != 250)                    return false;                else                    return true;            }            catch (Exception exc)            {                return false;            }        }        /// <summary>        /// 将string型转换为Base64        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        string ConvertToBase64(string str)        {            byte[] data = Encoding.UTF8.GetBytes(str);            return Convert.ToBase64String(data);        }        /// <summary>        /// 发送消息至服务器         /// </summary>        /// <param name="msg"></param>        public void Send(string msg)        {            byte[] data = Encoding.UTF8.GetBytes(msg);            ns.Write(data, 0, data.Length);            ns.Flush();        }        public int SMTPReceive()        {            try            {                byte[] data = new byte[1024];                int size = ns.Read(data, 0, 1024);                string result = Encoding.UTF8.GetString(data, 0, size);                int index = result.IndexOf(' ');                if (index == -1)                    index = result.Length;                result = result.Substring(0, index);                return int.Parse(result);            }            catch            {                return 0;            }        }    }}


原创粉丝点击