asp.net jmail 接收
场景:asp.net运用jmail接收外部邮件
asp.net使用jmail接收外部邮件
最近我们公司要接收外部邮件
功能都差不多都实现了,不过一个很奇怪的问题就是设置了163的邮箱之后,但是我用jamil接受到的邮件并不会全部的接收
很多邮件都会接收失败!例如
service@51cto.com,info@mail1.dianping.com,很多企业邮件都接收不了,但是个别的有可疑接收,我目前只可以接收到卓越网的企业邮件,但是如果是163的邮件又可以接受的到,就连QQ邮箱都接收不到,请问jamil接收外部邮件还需要什么特别的设置吗??? 请大家看看!!!谢谢.....
方法在这里面
private bool webf_pop3_mail(DateTime dt_pop, string ls_server, int in_pop, string user, string password, ref string arg_msg)
{
bool rslt = true;
jmail.POP3Class popmail = new jmail.POP3Class();//建立收邮件对象
jmail.Message mailmessage; //建立邮件信息接口
jmail.Attachments atts;//建立附件集接口
jmail.Attachment att;//建立附件接口
popmail.Connect(user, password, ls_server, in_pop);
string ls_sql = "select isnull(max(pop_senddate),0) as date_time from oa_pop_msg where pop_inmail='" + user.Trim() + "' and pop_opid=" + Session["opid"].ToString().Trim() + " and pop_issend=0 ";
DataTable dt = cs_con.Select(ls_sql, null, ref arg_msg).Tables[0];
DateTime d_time = dt_pop;
if (dt.Rows[0]["date_time"].ToString().Trim() != "1900-1-1 0:00:00")
{
d_time = Convert.ToDateTime(dt.Rows[0]["date_time"]);
}
int billid = 0;
int num = 0;
string mail_billid = "";
if (popmail.Count > 0)
{
for (int i = 1; i <= popmail.Count; i++) //根据取到的邮件数量依次取得每封邮件
{
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(Convert.ToInt32(Application["timeoutSecond"]))))
{
try
{
mailmessage = popmail.Messages[i]; //取得一条邮件信息
string ls_msg_date = mailmessage.Headers.Text;
if (mailmessage.Headers.Text.IndexOf("From:") - mailmessage.Headers.Text.IndexOf("Date:") - 12 > 0)
{
ls_msg_date = mailmessage.Headers.Text.Substring(mailmessage.Headers.Text.IndexOf("Date:") + 5, mailmessage.Headers.Text.IndexOf("From:") - mailmessage.Headers.Text.IndexOf("Date:") - 12).Trim();
}
else
{
ls_msg_date = mailmessage.Headers.Text.Substring(mailmessage.Headers.Text.IndexOf("Date:") + 5, mailmessage.Headers.Text.IndexOf("To:") - mailmessage.Headers.Text.IndexOf("Date:") - 12).Trim();
}
DateTime dt_date = Convert.ToDateTime(ls_msg_date);
if (dt_date > d_time)
{
if (!new_id.tryGetNewID("oa_pop_msg", "pop_billid", ref billid, ref arg_msg))
{
rslt = false;
arg_msg = "接收是ID参生失败!";
scope.Dispose();
goto ext_webf_pop3_mail;
}
atts = mailmessage.Attachments; //取得该邮件的附件集合
mailmessage.Charset = "UTF-8"; //设置邮件的编码方式
mailmessage.Encoding = "base64"; //设置邮件的附件编码方式
mailmessage.ISOEncodeHeaders = false; //是否将信头编码成iso-8859-1字符集
string ls_yxjb = mailmessage.Priority.ToString(); //邮件的优先级
string ls_fsyx = mailmessage.From; //邮件的发送人的信箱地址
string ls_fsr = mailmessage.FromName; //邮件的发送人
// string ls_yjzt =Server.HtmlDecode( mailmessage.Subject); //邮件主题
string ls_yjzt = mailmessage.Subject;
string ls_yjnr = "";
if (mailmessage.HTMLBody != null)
{
ls_yjnr = mailmessage.HTMLBody; //邮件内容
}
string ls_yjdx = mailmessage.Size.ToString(); //邮件大小
string ls_h = mailmessage.Headers.ToString();
if (!webf_insert_msg(billid, Convert.ToInt32(Session["opid"]), ls_yjzt.Trim(), ls_yjnr.Trim(), dt_date, ls_fsyx, System.DateTime.Now, user.Trim(), atts.Count, ref arg_msg))
{
rslt = false;
arg_msg = ls_yjzt + "邮件接收失败!";
scope.Dispose();
goto ext_webf_pop3_mail;
}
for (int j = 0; j < atts.Count; j++)
{
att = atts[j]; //取得附件
string attname = att.Name; //附件名称
int file_size = att.Size;
string path = Server.MapPath("../uploadfile/") + Session["opid"].ToString().Trim() + "_" + System.DateTime.Now.Millisecond.ToString().Trim() + "_" + attname.Replace("/", "");
att.SaveToFile(path); //上传到服务器
int get_id = 0;
if (!new_id.tryGetNewID("permit_msg_image", "billid", ref get_id, ref arg_msg))
{
rslt = false;
arg_msg = ls_yjzt + "邮件接收附件失败!";
scope.Dispose();
goto ext_webf_pop3_mail;
}
Byte[] filedata = new Byte[file_size];
System.IO.FileInfo fi = new System.IO.FileInfo(path);
System.IO.FileStream fs = fi.OpenRead();
fs.Read(filedata, 0, file_size);
fs.Close();
if (!webf_insert(get_id, billid, System.DateTime.Now, attname, attname.Substring(attname.LastIndexOf(".") + 1), file_size, 6, filedata, ref arg_msg))
{
rslt = false;
arg_msg = ls_yjzt + "邮件接收附件失败!";
scope.Dispose();
goto ext_webf_pop3_mail;
}
if (File.Exists(path))
{
File.Delete(path);
}
}
scope.Complete();
}
else
{
scope.Dispose();
goto ext_webf_pop3_mail;
}
}
catch
{
arg_msg = "邮件接收失败!";
num++;
mail_billid = mail_billid + ";第" + i + "条";
scope.Dispose();
}
}
}
ext_webf_pop3_mail: ;
att = null;
atts = null;
}
else
{
arg_msg = "没有新邮件!";
}
popmail.Disconnect();
popmail = null;
if (num > 0)
{
arg_msg = "邮箱" + user + ",接收中有" + num.ToString() + "条接收失败,分别为" + mail_billid + "";
}
return rslt;
}
------解决方案--------------------
不是技术的原因。而是反垃圾邮件机制。
注意做反向解析,避免ip和domain被运营商加入黑名单。
和被block的邮件服务商联系,寻求帮助。
------解决方案--------------------
JMAIL免费版本的功能是受限制的啦!
asp.net使用jmail接收外部邮件
最近我们公司要接收外部邮件
功能都差不多都实现了,不过一个很奇怪的问题就是设置了163的邮箱之后,但是我用jamil接受到的邮件并不会全部的接收
很多邮件都会接收失败!例如
service@51cto.com,info@mail1.dianping.com,很多企业邮件都接收不了,但是个别的有可疑接收,我目前只可以接收到卓越网的企业邮件,但是如果是163的邮件又可以接受的到,就连QQ邮箱都接收不到,请问jamil接收外部邮件还需要什么特别的设置吗??? 请大家看看!!!谢谢.....
方法在这里面
private bool webf_pop3_mail(DateTime dt_pop, string ls_server, int in_pop, string user, string password, ref string arg_msg)
{
bool rslt = true;
jmail.POP3Class popmail = new jmail.POP3Class();//建立收邮件对象
jmail.Message mailmessage; //建立邮件信息接口
jmail.Attachments atts;//建立附件集接口
jmail.Attachment att;//建立附件接口
popmail.Connect(user, password, ls_server, in_pop);
string ls_sql = "select isnull(max(pop_senddate),0) as date_time from oa_pop_msg where pop_inmail='" + user.Trim() + "' and pop_opid=" + Session["opid"].ToString().Trim() + " and pop_issend=0 ";
DataTable dt = cs_con.Select(ls_sql, null, ref arg_msg).Tables[0];
DateTime d_time = dt_pop;
if (dt.Rows[0]["date_time"].ToString().Trim() != "1900-1-1 0:00:00")
{
d_time = Convert.ToDateTime(dt.Rows[0]["date_time"]);
}
int billid = 0;
int num = 0;
string mail_billid = "";
if (popmail.Count > 0)
{
for (int i = 1; i <= popmail.Count; i++) //根据取到的邮件数量依次取得每封邮件
{
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(Convert.ToInt32(Application["timeoutSecond"]))))
{
try
{
mailmessage = popmail.Messages[i]; //取得一条邮件信息
string ls_msg_date = mailmessage.Headers.Text;
if (mailmessage.Headers.Text.IndexOf("From:") - mailmessage.Headers.Text.IndexOf("Date:") - 12 > 0)
{
ls_msg_date = mailmessage.Headers.Text.Substring(mailmessage.Headers.Text.IndexOf("Date:") + 5, mailmessage.Headers.Text.IndexOf("From:") - mailmessage.Headers.Text.IndexOf("Date:") - 12).Trim();
}
else
{
ls_msg_date = mailmessage.Headers.Text.Substring(mailmessage.Headers.Text.IndexOf("Date:") + 5, mailmessage.Headers.Text.IndexOf("To:") - mailmessage.Headers.Text.IndexOf("Date:") - 12).Trim();
}
DateTime dt_date = Convert.ToDateTime(ls_msg_date);
if (dt_date > d_time)
{
if (!new_id.tryGetNewID("oa_pop_msg", "pop_billid", ref billid, ref arg_msg))
{
rslt = false;
arg_msg = "接收是ID参生失败!";
scope.Dispose();
goto ext_webf_pop3_mail;
}
atts = mailmessage.Attachments; //取得该邮件的附件集合
mailmessage.Charset = "UTF-8"; //设置邮件的编码方式
mailmessage.Encoding = "base64"; //设置邮件的附件编码方式
mailmessage.ISOEncodeHeaders = false; //是否将信头编码成iso-8859-1字符集
string ls_yxjb = mailmessage.Priority.ToString(); //邮件的优先级
string ls_fsyx = mailmessage.From; //邮件的发送人的信箱地址
string ls_fsr = mailmessage.FromName; //邮件的发送人
// string ls_yjzt =Server.HtmlDecode( mailmessage.Subject); //邮件主题
string ls_yjzt = mailmessage.Subject;
string ls_yjnr = "";
if (mailmessage.HTMLBody != null)
{
ls_yjnr = mailmessage.HTMLBody; //邮件内容
}
string ls_yjdx = mailmessage.Size.ToString(); //邮件大小
string ls_h = mailmessage.Headers.ToString();
if (!webf_insert_msg(billid, Convert.ToInt32(Session["opid"]), ls_yjzt.Trim(), ls_yjnr.Trim(), dt_date, ls_fsyx, System.DateTime.Now, user.Trim(), atts.Count, ref arg_msg))
{
rslt = false;
arg_msg = ls_yjzt + "邮件接收失败!";
scope.Dispose();
goto ext_webf_pop3_mail;
}
for (int j = 0; j < atts.Count; j++)
{
att = atts[j]; //取得附件
string attname = att.Name; //附件名称
int file_size = att.Size;
string path = Server.MapPath("../uploadfile/") + Session["opid"].ToString().Trim() + "_" + System.DateTime.Now.Millisecond.ToString().Trim() + "_" + attname.Replace("/", "");
att.SaveToFile(path); //上传到服务器
int get_id = 0;
if (!new_id.tryGetNewID("permit_msg_image", "billid", ref get_id, ref arg_msg))
{
rslt = false;
arg_msg = ls_yjzt + "邮件接收附件失败!";
scope.Dispose();
goto ext_webf_pop3_mail;
}
Byte[] filedata = new Byte[file_size];
System.IO.FileInfo fi = new System.IO.FileInfo(path);
System.IO.FileStream fs = fi.OpenRead();
fs.Read(filedata, 0, file_size);
fs.Close();
if (!webf_insert(get_id, billid, System.DateTime.Now, attname, attname.Substring(attname.LastIndexOf(".") + 1), file_size, 6, filedata, ref arg_msg))
{
rslt = false;
arg_msg = ls_yjzt + "邮件接收附件失败!";
scope.Dispose();
goto ext_webf_pop3_mail;
}
if (File.Exists(path))
{
File.Delete(path);
}
}
scope.Complete();
}
else
{
scope.Dispose();
goto ext_webf_pop3_mail;
}
}
catch
{
arg_msg = "邮件接收失败!";
num++;
mail_billid = mail_billid + ";第" + i + "条";
scope.Dispose();
}
}
}
ext_webf_pop3_mail: ;
att = null;
atts = null;
}
else
{
arg_msg = "没有新邮件!";
}
popmail.Disconnect();
popmail = null;
if (num > 0)
{
arg_msg = "邮箱" + user + ",接收中有" + num.ToString() + "条接收失败,分别为" + mail_billid + "";
}
return rslt;
}
------解决方案--------------------
不是技术的原因。而是反垃圾邮件机制。
注意做反向解析,避免ip和domain被运营商加入黑名单。
和被block的邮件服务商联系,寻求帮助。
------解决方案--------------------
JMAIL免费版本的功能是受限制的啦!