自己写的一个发送邮件的程序,主要代码如下:
SmtpClient smtpClient = new SmtpClient();
smtpClient.UseDefaultCredentials = true;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; //指定电子邮件发送方式 smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd); //用户名和密码
smtpClient.Host = smtpserver; ; //指定SMTP服务器
MailMessage mailMessage;
if (strTo.Trim().IndexOf(";") <= 0)
{
mailMessage = new MailMessage(strfrom, strTo);
}
else
{ mailMessage = new MailMessage();
mailMessage.From = new MailAddress(strfrom);
for (int i = 0; i < to.Length; i++)
{
if (to[i].Trim() == "")
{
Log("发送人:" + FromUserName + "接收人邮箱:" + strTo + " 时间:" + DateTime.Now);
}
else
{
mailMessage.To.Add(to[i]);
}
} } mailMessage.Subject = subj;
string html = "<table ><tr><td width='80px'> 发件人:</td><td>" + FromUserName + " " + FromEmail;
html += "</td></tr><tr><td width='80px'>提交时间:</td><td>" + AddTime;
html += "</td></tr><tr><td width='80px'>抄送人:</td><td>" + ToNameList;
html += "</td></tr><tr><td width='80px' valign=top>内容:</td><td>" + bodys;
html+="</td</tr></table>";
mailMessage.Body = html;
mailMessage.BodyEncoding = System.Text.Encoding.Default; //正文编码
mailMessage.IsBodyHtml = true; //设置为HTML格式
mailMessage.Priority = MailPriority.High; //优先级
smtpClient.Send(mailMessage);
发送邮件的邮箱是一个企业邮箱(不是免费的),格式为*****@***.com.cn,接收邮件的邮箱和发送邮件的邮箱是同一域的,但
是发送的过程中总是出错,错误日志信息如下:
错误信息:Mailbox name not allowed. The server response was: 5.7.1 <***@*****.com.cn>: Sender address rejected: not logged in 发送人:***接收人邮箱:****@****.com.cn 时间:2010-5-10 9:13:25;然后我把发送邮件的邮箱换成另外一个不是这个邮件域内的又可以发送出去,真不知道是怎么回事?麻烦高手帮忙看看,万分感谢!
SmtpClient smtpClient = new SmtpClient();
smtpClient.UseDefaultCredentials = true;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; //指定电子邮件发送方式 smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd); //用户名和密码
smtpClient.Host = smtpserver; ; //指定SMTP服务器
MailMessage mailMessage;
if (strTo.Trim().IndexOf(";") <= 0)
{
mailMessage = new MailMessage(strfrom, strTo);
}
else
{ mailMessage = new MailMessage();
mailMessage.From = new MailAddress(strfrom);
for (int i = 0; i < to.Length; i++)
{
if (to[i].Trim() == "")
{
Log("发送人:" + FromUserName + "接收人邮箱:" + strTo + " 时间:" + DateTime.Now);
}
else
{
mailMessage.To.Add(to[i]);
}
} } mailMessage.Subject = subj;
string html = "<table ><tr><td width='80px'> 发件人:</td><td>" + FromUserName + " " + FromEmail;
html += "</td></tr><tr><td width='80px'>提交时间:</td><td>" + AddTime;
html += "</td></tr><tr><td width='80px'>抄送人:</td><td>" + ToNameList;
html += "</td></tr><tr><td width='80px' valign=top>内容:</td><td>" + bodys;
html+="</td</tr></table>";
mailMessage.Body = html;
mailMessage.BodyEncoding = System.Text.Encoding.Default; //正文编码
mailMessage.IsBodyHtml = true; //设置为HTML格式
mailMessage.Priority = MailPriority.High; //优先级
smtpClient.Send(mailMessage);
发送邮件的邮箱是一个企业邮箱(不是免费的),格式为*****@***.com.cn,接收邮件的邮箱和发送邮件的邮箱是同一域的,但
是发送的过程中总是出错,错误日志信息如下:
错误信息:Mailbox name not allowed. The server response was: 5.7.1 <***@*****.com.cn>: Sender address rejected: not logged in 发送人:***接收人邮箱:****@****.com.cn 时间:2010-5-10 9:13:25;然后我把发送邮件的邮箱换成另外一个不是这个邮件域内的又可以发送出去,真不知道是怎么回事?麻烦高手帮忙看看,万分感谢!
string username = uname;
//邮件发送者
MailAddress from = new MailAddress(Email);
//邮件接收者
MailAddress to = new MailAddress(Umail);
MailMessage mailobj = new MailMessage(from, to);
//添加发送和抄送
// mailobj.To.Add(""); // mailobj.CC.Add("");
//邮件标题
mailobj.Subject = title;
//邮件内容
mailobj.Body = Message;
//邮件不是html格式
mailobj.IsBodyHtml =true;
//邮件编码格式
mailobj.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");
//邮件优先级
mailobj.Priority = MailPriority.Normal;
//邮箱服务器
SmtpClient smtp = new SmtpClient(EmailServers);
//或者用:
//SmtpClient smtp = new SmtpClient();
//smtp.Host = mailServer;
//不使用默认凭据访问服务器
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(username,pwd);
//使用network发送到smtp服务器
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
//开始发送邮件
smtp.Send(mailobj);看看是不是你哪里写错了
smtpClient.EnableSsl = true;
//如出现:邮箱不可用。 服务器响应为: 5.7.1 Unable to relay for ***@gmail.com
//解决办法如下:在IIS中,右击“默认SMTP虚拟服务器”,选择“属性”,切换到“访问”页,点击“中继”按钮,在弹出框中选择“仅以下列表除外”,确定。
//二:用其它的邮件服务器发送,经测试大多数免费邮箱都不提供SMTP服务,用qq邮箱的就可以,方法:进入qq邮箱-->设置-->帐户-->开通POP3/IMAP/SMTP服务,即可用smtp.qq.com作为邮件服务器了,可用它来发送邮件using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Mail;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ } public void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody)
{
System.Net.Mail.SmtpClient client = new SmtpClient(strSmtpServer);
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
System.Net.Mail.MailMessage message = new MailMessage(strFrom, strto, strSubject, strBody);
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = true;
client.Send(message);
}
//第一个参数是邮箱服务器
//第二个参数发件人的帐号
//第三个参数发件人密码
//第四个参数收件人帐号
//第五个参数主题
//第六个参数内容.
protected void Button1_Click(object sender, EventArgs e)
{//发送邮件
try
{
//SendSMTPEMail("nz.oicp.net", "[email protected]", "123", "[email protected]", "123", "用asp.net发送邮件,用自己的邮件服务器,测试成功");
SendSMTPEMail("smtp.qq.com", "[email protected]", "123xxxxxxx", "[email protected]", "123", "用asp.net发送邮件,用qq的smtp.qq.com服务器,测试成功"); }
catch (Exception er)
{
Label1.Text = er.Message;
}
}
}
我修改了:smtpClient.UseDefaultCredentials = false;
可还是同样的错误;
二楼:
我也觉得问题出在smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd); //用户名和密码
这个地方,好像是没有和邮件服务器连接上,但是就是不知道原因是什么
四楼:
如果发件箱只要***@**.com.cn前面的部分‘***’的话,程序报错:邮箱格式不正确,所以还是要用完整的邮箱
这个发件箱使用的是35互联的企业邮箱;大家再帮忙分析一下是什么问题!
第二种方法:是用qq的SMTP邮件服务器测试成功的
试试