ESMTP邮件发送方法,采用Socket

再试过了很多发邮件的方法后决定写一个连接服务器的方法来发邮件。

在这之前做过一个FTP客户端,采用的就是Socket 连接服务器,想到这里觉得用在SMTP上是不是也可以呢

于是立马打开telnet 连接了下,成功了,哈哈。开始查命令

EHLO LoaclHostName

auth login

输入用户名Base64

密码 base64

验证成功了

mail from:<mail> 这里是关键千万别把 <> 掉了,这个问题烦死我了

rcpt to:<mail> 同上

Data 状态码为354  就可以开始写邮件了,

WriteStream("Date:"+DateTime.Now.ToUniversalTime().ToString(),this.charset);//发送时间
            WriteStream("From:\""+GetBase64(this.fromname)+"\"<"+this.from+">",this.charset);//发件人
            WriteStream("To:\"" + GetBase64(this.toname) + "\"<"+this.to+">",this.charset);//收件人
            WriteStream("Subject:"+GetBase64(this.subject),this.charset);//发送主题

            
//信件ID
            WriteStream("Message-Id:"+DateTime.Now.ToUniversalTime().ToString("yyyyMMddHHmmss")+this.from.Substring(this.from.IndexOf("@")),this.charset);

            
//发送软件信息
            WriteStream("X-mailer: MailSend 1 2 [cn]");

            
//MIME版本
            WriteStream("MIME-Version:1.0",this.charset);

            
//回复地址
            WriteStream("Reply-To:"+this.from,this.charset);

            
//邮件优先级
            if (priority !=3)
            
{
                WriteStream(
"X-Priority:"+priority,this.charset);//优先级
            }


            
//邮件格式
            WriteStream("Content-Type:multipart/alternative;Boundary=\"=====003_Dragon766211784578_=====\"",this.charset); 
            WriteStream(
"",this.charset);  

            WriteStream(
"This is a multi-part message in MIME format.",this.charset);
            WriteStream(
"",this.charset);
 
            
if(!_isHtml)
            
{
                
// 文本信息
                WriteStream ("--=====003_Dragon766211784578_=====");
                WriteStream (
"Content-Type: " + this.content_type + ";charset=" + this.charset);
                WriteStream (
"Content-Transfer-Encoding:" + this.encode);
                WriteStream (
"");
                WriteStream (
this.AuthStream(body));
                WriteStream (
"");//一个部分写完之后就写如空信息,分段 
            }

            
else
            
{
                
//html信息
                WriteStream ( "--=====003_Dragon766211784578_====="); 
                WriteStream ( 
"Content-Type: " + this.content_type + ";charset=" + charset); 
                WriteStream ( 
"Content-Transfer-Encoding:" + encode); 
                WriteStream ( 
""); 
                WriteStream (
this.AuthStream(this.htmlbody)); 
                WriteStream ( 
"");  
            }
 
 
            
//增加附件
            Attachment();
            WriteStream(
"",this.charset);

            
//结束标志
            WriteStream("--=====003_Dragon766211784578_=====--",this.charset);

向服务器发送一个 "." 结束会话

if(!OperaStream("\r\n.","250"))
   {
    boolErr = true;
   }
OK了,到现在为止,不知道新浪为什么不能发,查了下,好像是新浪在验证时会访问你的机器,如果能访问成功才能发。不知道有什么高招忘指教
posted on 2007-06-04 17:37  金宝  阅读(576)  评论(0编辑  收藏  举报