请教SMTP协议的用户认证问题 helo <domain>后mail from:<address>报错,提示要认证用户。请问谁知道怎么认证?是哪个命令?我翻了rfc821也没有找到。大家帮帮忙。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分太少了。哈哈俣。拿回去用吧。巨好使。public void SmtpSend(out bool _Succeed) { _Succeed = false; // 创建TcpClient对象, 并建立连接 TcpClient tcp = null; try{tcp = new TcpClient(_EmailParameters.server,EmailParameters.port);} catch{return;} if(ReadString (tcp.GetStream()).Substring(0,3)!="220")//获取连接信息 return; if (!Command (tcp.GetStream(), "EHLO Localhost", "250"))// 开始进行服务器认证 return; if (!Command (tcp.GetStream(), "AUTH LOGIN", "334"))// 需要身份验证 return; if (!Command (tcp.GetStream(), ToBase64 (_EmailParameters.username), "334"))// 此处将username转换为Base64码 return; if (!Command (tcp.GetStream(), ToBase64 (_EmailParameters.password), "235"))// 此处将password转换为Base64码 return; // 准备发送 WriteString (tcp.GetStream(), "mail From: " + _EmailParameters.from); WriteString (tcp.GetStream(), "rcpt to: " + _EmailParameters.to); WriteString (tcp.GetStream(), "data"); // 发送邮件头 WriteString (tcp.GetStream(), "Date: " + DateTime.Now); // 时间 WriteString (tcp.GetStream(), "From: " + _EmailParameters.fromname + "<" + _EmailParameters.from + ">"); // 发件人 WriteString (tcp.GetStream(), "Subject: " + _EmailParameters.subject); // 主题 WriteString (tcp.GetStream(), "To:" + _EmailParameters.toname + "<" + _EmailParameters.to + ">"); // 收件人 //邮件格式 WriteString (tcp.GetStream(), "Reply-To:" + _EmailParameters.from); // 回复地址 WriteString (tcp.GetStream(), "X-Priority:" + EmailParameters.priority); // 优先级 WriteString (tcp.GetStream(), "KoEnemy-Version:1.0"); // MIME版本 //html信息 WriteString (tcp.GetStream(), "Content-Type: text/html;charset=" + EmailParameters.languageencoding); WriteString (tcp.GetStream(), "Content-Transfer-Encoding:" + EmailParameters.encoding); WriteString (tcp.GetStream(), ""); WriteString (tcp.GetStream(), ""); WriteString (tcp.GetStream(), _EmailParameters.content); WriteString (tcp.GetStream(), ""); if(!Command (tcp.GetStream(), ".", "250")) return; // 关闭连接 tcp.Close (); _Succeed = true; } /// <summary> /// 向流中写入字符 protected void WriteString (NetworkStream netStream, string str) { str = str + "\r\n"; // 加入换行符 byte[] bWrite = Encoding.GetEncoding(EmailParameters.languageencoding).GetBytes(str.ToCharArray()); try{netStream.Write(bWrite,0,bWrite.Length);} catch{} } /// <summary> /// 从流中读取字符 protected string ReadString (NetworkStream netStream) { string sp = null; byte[] by = new byte[1024]; int size = netStream.Read(by,0,by.Length);// 读取数据流 if (size > 0) sp = Encoding.Default.GetString(by);// 转化为String return sp; } /// <summary> /// 发出命令并判断返回信息是否正确 protected bool Command (NetworkStream netStream, string command, string state) { string sp=null; bool success=false; try { WriteString (netStream, command);// 写入命令 sp = ReadString (netStream);// 接受返回信息 if (sp.IndexOf(state) != -1)// 判断状态码是否正确 success=true; } catch{} return success; } /// <summary> /// 字符串编码为Base64 protected string ToBase64 (string str) { try { byte[] by = Encoding.Default.GetBytes (str.ToCharArray()); str = Convert.ToBase64String (by); } catch{} return str; } } 多谢,smtp得字符串编码必须是base64吗?AUTH LOGIN这个是从哪里找来得?怎么我在smtp协议上没找到呢?还有我输入 HELO时和你输入ELHO时效果应该是一样的啊,smtp服务器回复的却不一样?重点AUTH LOGIN 哪里找到的? AUTH LOGIN这个从哪里看来得?我翻了Rfc821 smtp协议。也没有找到。是不是有什么扩展得协议?还有为什么 HELO 和 EHLO 得倒服务器的回馈不一样的? 请教NET的异常问题: FatalExecutionEngineError C#图片识别 怎么使mdi子窗口一开始就最大化? 关于toolStrip动态生成的button的问题 请问要完成这个任务需要哪些知识 C#使用C#传送文件 求助:我有4个datagridview 需要导入到同一个excel文件里的不同sheets里 请问在 c# 中 如何 监听 一个变量的 更变? 急!请问? .NET学习中的一些技巧,希望高手根贴 请问高手:使用ADO.net的时候遇到的一个问题。 菜鸟问题,关于中英文混合字符串。
{
_Succeed = false;
// 创建TcpClient对象, 并建立连接
TcpClient tcp = null;
try{tcp = new TcpClient(_EmailParameters.server,EmailParameters.port);}
catch{return;} if(ReadString (tcp.GetStream()).Substring(0,3)!="220")//获取连接信息
return;
if (!Command (tcp.GetStream(), "EHLO Localhost", "250"))// 开始进行服务器认证
return;
if (!Command (tcp.GetStream(), "AUTH LOGIN", "334"))// 需要身份验证
return;
if (!Command (tcp.GetStream(), ToBase64 (_EmailParameters.username), "334"))// 此处将username转换为Base64码
return;
if (!Command (tcp.GetStream(), ToBase64 (_EmailParameters.password), "235"))// 此处将password转换为Base64码
return;
// 准备发送
WriteString (tcp.GetStream(), "mail From: " + _EmailParameters.from);
WriteString (tcp.GetStream(), "rcpt to: " + _EmailParameters.to);
WriteString (tcp.GetStream(), "data");
// 发送邮件头
WriteString (tcp.GetStream(), "Date: " + DateTime.Now); // 时间
WriteString (tcp.GetStream(), "From: " + _EmailParameters.fromname + "<" + _EmailParameters.from + ">"); // 发件人
WriteString (tcp.GetStream(), "Subject: " + _EmailParameters.subject); // 主题
WriteString (tcp.GetStream(), "To:" + _EmailParameters.toname + "<" + _EmailParameters.to + ">"); // 收件人
//邮件格式
WriteString (tcp.GetStream(), "Reply-To:" + _EmailParameters.from); // 回复地址
WriteString (tcp.GetStream(), "X-Priority:" + EmailParameters.priority); // 优先级
WriteString (tcp.GetStream(), "KoEnemy-Version:1.0"); // MIME版本
//html信息
WriteString (tcp.GetStream(), "Content-Type: text/html;charset=" + EmailParameters.languageencoding);
WriteString (tcp.GetStream(), "Content-Transfer-Encoding:" + EmailParameters.encoding);
WriteString (tcp.GetStream(), "");
WriteString (tcp.GetStream(), "");
WriteString (tcp.GetStream(), _EmailParameters.content);
WriteString (tcp.GetStream(), "");
if(!Command (tcp.GetStream(), ".", "250"))
return;
// 关闭连接
tcp.Close ();
_Succeed = true;
}
/// <summary>
/// 向流中写入字符
protected void WriteString (NetworkStream netStream, string str)
{
str = str + "\r\n"; // 加入换行符
byte[] bWrite = Encoding.GetEncoding(EmailParameters.languageencoding).GetBytes(str.ToCharArray());
try{netStream.Write(bWrite,0,bWrite.Length);}
catch{}
} /// <summary>
/// 从流中读取字符
protected string ReadString (NetworkStream netStream)
{
string sp = null;
byte[] by = new byte[1024];
int size = netStream.Read(by,0,by.Length);// 读取数据流
if (size > 0)
sp = Encoding.Default.GetString(by);// 转化为String
return sp;
} /// <summary>
/// 发出命令并判断返回信息是否正确
protected bool Command (NetworkStream netStream, string command, string state)
{
string sp=null;
bool success=false;
try
{
WriteString (netStream, command);// 写入命令
sp = ReadString (netStream);// 接受返回信息
if (sp.IndexOf(state) != -1)// 判断状态码是否正确
success=true;
}
catch{}
return success;
}
/// <summary>
/// 字符串编码为Base64
protected string ToBase64 (string str)
{
try
{
byte[] by = Encoding.Default.GetBytes (str.ToCharArray());
str = Convert.ToBase64String (by);
}
catch{}
return str;
}
}
AUTH LOGIN
这个是从哪里找来得?怎么我在smtp协议上没找到呢?
还有我输入 HELO时和你输入ELHO时效果应该是一样的啊,smtp服务器回复的却不一样?重点
AUTH LOGIN 哪里找到的?
我翻了Rfc821 smtp协议。也没有找到。
是不是有什么扩展得协议?
还有为什么 HELO 和 EHLO 得倒服务器的回馈不一样的?