ESMTP邮件发送方法,采用Socket
再试过了很多发邮件的方法后决定写一个连接服务器的方法来发邮件。
在这之前做过一个FTP客户端,采用的就是Socket 连接服务器,想到这里觉得用在SMTP上是不是也可以呢
于是立马打开telnet 连接了下,成功了,哈哈。开始查命令
EHLO LoaclHostName
auth login
输入用户名Base64
密码 base64
验证成功了
mail from:<mail> 这里是关键千万别把 <> 掉了,这个问题烦死我了
rcpt to:<mail> 同上
Data 状态码为354 就可以开始写邮件了,
向服务器发送一个 "." 结束会话
if(!OperaStream("\r\n.","250"))
{
boolErr = true;
}
OK了,到现在为止,不知道新浪为什么不能发,查了下,好像是新浪在验证时会访问你的机器,如果能访问成功才能发。不知道有什么高招忘指教
在这之前做过一个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);
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了,到现在为止,不知道新浪为什么不能发,查了下,好像是新浪在验证时会访问你的机器,如果能访问成功才能发。不知道有什么高招忘指教