对昨天写的发邮件的代码做了更新,并加了注释

本文介绍了一个使用TCP客户端发送邮件的方法,详细展示了如何通过编写代码实现邮件的群发功能,包括服务器连接、身份验证及邮件内容的构造过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 /// <summary>
 /// SendMail 的摘要说明。
 /// </summary>
 public class SendMail
 {
  public SendMail()
  {   
  }
  TcpClient smtpSrv;
  NetworkStream netStrm;
  string CRLF="/r/n"; 
  /// <summary>
  ///
  /// </summary>
  /// <param name="userList">收件箱</param>
  /// <param name="server">服务器</param>
  /// <param name="user">(服务器上的)用户名</param>
  /// <param name="pwd">密码</param>
  /// <param name="send">发件箱</param>
  /// <param name="subject">主题</param>
  /// <param name="text">内容</param>
  public string QunFa(string userList,string server,string user,string pwd,string send,string subject,string text)
  {
   try
   {
    string data;
    smtpSrv=new TcpClient(server,25); //smtp服务器地址,如smtp.163.com   
    netStrm=smtpSrv.GetStream();
    StreamReader rdStrm=new StreamReader(smtpSrv.GetStream());
    this.WriteStream("EHLO Local");
    this.WriteStream("AUTH LOGIN");    
    data=AuthStream(user);//user用户名,例如你在网易是的通行证名称是zhangsan,则此处就写zhangsan
    this.WriteStream(data);    
    data=AuthStream(pwd); //pwd密码,与您上面的用户名对应的密码
    this.WriteStream(data);
    data="MAIL FROM:<"+send+">";//send发件箱,如zhangsan@163.com
    this.WriteStream(data);;
    data="RCPT TO:<"+userList+">";//userList为收件箱地址
    this.WriteStream(data);
    this.WriteStream("DATA");
    data="Date:"+DateTime.Now;
    this.WriteStream(data);
    data="From:"+send;//send发件箱,如zhangsan@163.com
    this.WriteStream(data);   
    data="TO:"+userList;
    this.WriteStream(data);
    data="SUBJECT:"+subject;//subject邮件的主题
    this.WriteStream(data);
    data="Reply-TO:"+send;//send发件箱,如zhangsan@163.com
    this.WriteStream(data);
    this.WriteStream("");
    this.WriteStream(text);//text邮件内容
    this.WriteStream(".");
    this.WriteStream("QUIT");
    netStrm.Close();
    rdStrm.Close();    
    return "1";
   }
   catch(Exception er)
   {
    return er.ToString();
   }
  }
  /// <summary>
  /// 该方法通过连接向服务器输出字符串数据
  /// </summary>
  /// <param name="strCmd">待发送的字符串</param>
  private void WriteStream(string strCmd)
  {
   strCmd+=CRLF;     //CRLF表示结束符
   byte[] bw=System.Text.Encoding.Default.GetBytes(strCmd);    //将字符串转为字节数组
   netStrm.Write(bw,0,bw.Length);     //将字节数组写入网络连接
  }

  /// <summary>
  /// 用于将普通字符串转换为等效的以64为基的字符串,即Base64编码形式
  /// </summary>
  /// <param name="strCmd">普通字符串</param>
  /// <returns></returns>
  private string AuthStream(string strCmd)
  {
   try
   {
    byte[] by=System.Text.Encoding.Default.GetBytes(strCmd);//将字符串转为字节数组
    strCmd=Convert.ToBase64String(by);
   }
   catch(Exception err)
   {
    return err.ToString();
   }
   return strCmd;
  }
 }

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值