十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你的这个要求有点离谱,如果真的要的话
10年积累的成都网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有长春免费网站建设让你可以放心的选择与我们合作。
建议去这个找吧,源代码都有的
package me.gacl.main;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Sendmail {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.host", "smtp.sohu.com");
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
//使用JavaMail发送邮件的5个步骤
//1、创建session
Session session = Session.getInstance(prop);
//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
//2、通过session得到transport对象
Transport ts = session.getTransport();
//3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
ts.connect("smtp.sohu.com", "gacl", "邮箱密码");
//4、创建邮件
Message message = createSimpleMail(session);
//5、发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
/**
* @Method: createSimpleMail
* @Description: 创建一封只包含文本的邮件
* @param session
* @return
* @throws Exception
*/
public static MimeMessage createSimpleMail(Session session)
throws Exception {
//创建邮件对象
MimeMessage message = new MimeMessage(session);
//指明邮件的发件人
message.setFrom(new InternetAddress("gacl@sohu.com"));
//指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipient(Message.RecipientType.TO, new InternetAddress("gacl@sohu.com"));
//邮件的标题
message.setSubject("只包含文本的简单邮件");
//邮件的文本内容
message.setContent("你好啊!", "text/html;charset=UTF-8");
//返回创建好的邮件对象
return message;
}
}
今天在做内网邮箱发送功能时报如下错误:
554 Relay rejected for policy reasons.
测试时给内容邮箱发送正常,给126发送就报如上错误,后来查看是权限限制的问题。
在网上查找到邮件发送时的常见问题总结,备注一下。
介绍邮件系统常见的错误代码及解释,还有客户端报错相关信息
按照下列“Q”代表问题,“A”代表解答。
Q:the server says:550 relaying mail to is not allowed
Q:The server says:550 ... relaying denied
Q:the server says:550 5.7.1 relaying not permitted:
A:使用某些Smtp服务器时,限制了收件人的地址,只能换一个Smtp服务器。
Q:The server says:550 :local user only
Q:The server says:550 :Invalid User
Q:The server says:550 Invalid recipient
A:使用163.NET,163.com,yeah.Net和netease.com之类的Smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的“帐户属性”中的“个人信息”里面填写正确的邮件地址。
Q:the server says:551 delivery not allowed to non-local recipient
Q:The server says:553 Relay restriction.
Q:The server says:553 From , message blocked.
Q:The server says:553 sorry,you are not allow to use this SMTP to relay your eami
Q:The server says:553 sorry, that domain isn't in my list of allowed rcpthosts
A:使用21cn.com,china.com,371.net,sina.com等大多数信箱的smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的“帐户属性”中的“个人信息”里面填写正确的邮件地址。
Q:The server says:505 client was not authenticated
Q:The server says:553 authentication is required to send mail as
A:使用263.net和sohu.com的Smtp服务器时,不但要用自身的邮箱发信,而且要加入身份验证,所以即要在“个人信息”中填写正确邮箱地址,又要选中“SMTP服务器需要认证”。
Q:The server says:535 Error:authenticatin failed
Q:The server says:535 Authentication unsuccessful
Q:The server says:452 Insufficient system storage
A:在使用Esmtp认证的过程中出错,检查一下Esmtp设置,多试几次。
Q:The server says:553 ...domain name required
Q:The server says:550 Unable to relay for ...
A:多出现在用Wingate代理服务器发送邮件时。虽然在Wingate中“POP3 邮箱帐号”要使用“用户名#POP3地址”的格式,但在“帐户属性”中的“个人信息”中还是要填写一般的格式。
Q:The server says:553 mailbox name not allowed
A:收件人邮箱地址不允许,需检查收件人地址是否正确。
Q:the server says:553 sorry, your envelop sender is in my badmailfrom list
A:服务器限制了收件人的地址,只能换一个smtp服务器发信。
Q:the server says:554 Transaction failed
Q:The server says:451 Requested action aborted,errno=28
A:传输失败,检查网络问题。
Q:the server says:503 error:needmail command
Q:The server says:503 need mail before RCPT.
Q:The server says:503 Bad sequence of commands
A:消息命令顺序出错,一般出现在其他错误之后,先检查之前出现的错误提示。
Q:The Server says:501 syntax.helo hostname
Q:The server says:501 Invalid domain name
Q:The server says:502 unimplemented command
Q:the server says:503 5.0.0 polite people say HELO first
Q:The server says:533 relay restriction
Q:The server says:544 :Recipient address rejected: Relay access denied
A:传输中的语法错误,原因不明。
连接服务器错误,请检查您的网络设置。如果安装防火墙/杀毒软件,请检查防火墙/杀毒软件是否允许DreamMail程序访问 Internet。
账号“xxx”发送邮件错误,错误代码:554;错误信息:554 Relay rejected for policy reasons.(检查邮件系统是否有发送外网邮箱的权限)
附相关资料
SMTP 有一组固定的响应代码,表示邮件服务器对于传送邮件要求的响应状况。其中 421、450、451、452、550、551、552、553、554 等 9 组代码表示您要求邮件服务器执行的动作不成功。
354
Start Mail input
开始传输邮件正文
421
domain Service not available, closing transmission channel
括号内的主机无法提供正常服务,关闭传送管道,邮件将滞留在主机上
440
邮件址错误
445
Server Rejected
被封锁
450
Client host rejected, Cannot resolve PTR
Temporary Process Error
Resource temporarily unaviable,please try again later
Requested mail action not taken: mailbox unavailable
无法 IP 反查
Requested mail action not taken: mailbox unavailable
所要求的邮件动作无法执行:邮件信箱无法提供服务,邮件将滞留在主机上
451
Domain of sender address sender@mail.com.tw does not resolve
qq trouble creating files in queue (#4.3.0)
queuename: Cannot create "qfCAA21081" in "/var/spool/mqueue" (euid=0): No space left on device
Requested action aborted, errno=28.
无法解析寄件者邮件地址
Requested action aborted: local error in processing
要求动作中断:本地端错误
Requested action aborted,errno=28
传送失败,检查网络问题。
452
Message for would exceed mailbox quota
Requested action not taken: insufficient system storage
要求动作无法执行:系统空间不足
Insufficient system storage
在使用Esmtp认证的过程中出错,检查一下Esmtp设置,多试几次。
454
Client was not authenticated
安全因素,被封锁
472
sender@mail.com.tw no DNS A-data returned
无法 IP 反查
501
Domain of sender address sender@mail.com.tw does not exist
无法 IP 反查
Mailbox not found
5.1.1 ... User unknown
无此使用者
Syntax error,parameters in command "RCPT TO:min@laohuyatse.com.tw"unrecognized or missing
no local part
Syntax error in recipient:
"@" or "." expected after "CC"
"@" or "." expected after "fau" :
email格式l错误
503
Either sender or receiver must be local account.
安全因素,权限不足
CAT@MAIL.FORTEK.COM.TW
无此使用者,不是本主机转送信件的使用者
error:needmail command
need mail before RCPT
Bad sequence of commands
消息命令顺序出错,一般出现在其他错误之后,先检查之前出现的错误提示。
5.0.0 polite people say HELO first
传输中的语法错误,原因不明
505
client was not authenticated
使用263.net和sohu.com的Smtp服务器时,不但要用自身的邮箱发信,而且要加入身份验证,所以即要在"个人信息"中填写正确邮箱地址,又要选中"SMTP服务器需要认证"。
521
This system is configured to reject mail from 211.20.70.148
安全因素,被封锁
535
Error:authenticatin failed
Authentication unsuccessful
在使用Esmtp认证的过程中出错,检查一下Esmtp设置,多试几次。
550
unknown user
User unknown
Invalid User
Recipient unknown
Mailbox disabled for this recipient
Unknown local part
Invalid recipient
Unable to relay for no such user
Recipient unknown
This account is not allowed
recipient unknown
No such mail drop defined,user disabled
I don't know
Relaying is prohibited
Relaying denied
relaying mail to is not allowed
... relaying denied
5.7.1 relaying not permitted:
REJECT SMTP Protocol Returned a Permanent Error 550 Forwarding percent hack is not permitted
Requested action not taken: mailbox unavailable
无此使用者,所要求动作无法执行:信箱不存在,邮件将退回给寄件者,或者限制了收件人的地址,只能换一个Smtp服务器。
System is busy
邮件系统错误
Subj similar too many!!
太多同主题信件
Relaying denied. IP name lookup failed
IP name lookup failed
DNS FAILURE
cannot route to sender address
无法 IP 反查
Relaying denied
Mailbox unavailable: This site may not be used as a relay agent.
无法转寄
:local user only
:Invalid User
Invalid recipient
使用163.net,163.com,yeah.net和netease.com之类的Smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的"帐户属性"中的"个人信息"里面填写正确的邮件地址。
Unable to relay for ...
多出现在用Wingate代理服务器发送邮件时。虽然在Wingate中"POP3 邮箱帐号"要使用"用户名#POP3地址"的格式,但在"帐户属性"中的"个人信息"中还是要填写一般的格式。
551
we do not relay ...
delivery not allowed to non-local recipient
无法转寄,使用21cn.com,china.com,371.net,sina.com等大多数信箱的smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的"帐户属性"中的"个人信息"里面填写正确的邮件地址。
User not local; please try forward-path
邮件服务器知道使用者不属于本地端,将尝试括号内的转送路径
552
Requested mail action aborted: exceeded storage allocation
所要求的动作中断:超出所分配的储存空间,邮件将退回给寄件者
Sorry, we don't allow mail from your host.
被封锁
553
sorry, that domain isn't in my list of allowed rcpthosts
mailbox name not allowed
邮件地址错误
Requested action not taken: mailbox name not allowed
sorry, your envelop sender is in my badmailfrom list
所要求的动作未执行:信箱不允许该动作执行 ,或者服务器限制了收件人的地址,只能换一个smtp服务器发信。
Relay restriction.
From , message blocked.
sorry,you are not allow to use this SMTP to relay your eami
sorry, that domain isn't in my list of allowed rcpthosts
使用21cn.com,china.com,371.net,sina.com等大多数信箱的smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的"帐户属性"中的"个人信息"里面填写正确的邮件地址。
authentication is required to send mail as
使用263.net和sohu.com的Smtp服务器时,不但要用自身的邮箱发信,而且要加入身份验证,所以即要在"个人信息"中填写正确邮箱地址,又要选中"SMTP服务器需要认证"。
...domain name required
多出现在用Wingate代理服务器发送邮件时。虽然在Wingate中"POP3 邮箱帐号"要使用"用户名#POP3地址"的格式,但在"帐户属性"中的"个人信息"中还是要填写一般的格式。
554
delivery error: dd This user doesn't have a yahoo.com account
delivery error: dd Sorry, your message to xxxxyahoo.com cannot be delivered. This account is over quota.
无此使用者
Transaction failed
传送失败,检查网络问题。
571
we don't accept junk mail (mail.sysnet.net.tw)
无效的寄件者
给你贴段代码 含注释的 要不不明白在问吧~~:-)
package com.company.paging.service.Impl;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import com.company.paging.service.MailService;
/**
* @ProjectName:paging
* @ClassName:MailServiceImpl
* @Description:TODO mail业务逻辑接口实现类
* @author:Administrator
* @date:2011-1-20 上午10:20:39
* @version v1.0
*
*/
public class MailServiceImpl implements MailService {
//协议
String protocol="smtp";
//发送邮箱
String from="发送邮件地址";
//String subject="HTML测试";
//smtp服务器
String server="smtp.sina.com";
//用户名
String user="";
//密码
String pass="";
public void sendMail(String address, String subject, String content,
File[] files) throws Exception {
// TODO Auto-generated method stub
Session session=createSession();
MimeMessage message=createMessage(session,address,subject,content,files);
System.out.println(message.getMessageID()+"=================");
Transport.send(message);
}
public void sendMail(String address, String subject, String content)
throws Exception {
// TODO Auto-generated method stub
sendMail(address, subject, content,null);
}
public void sendActivateLink(String address) throws Exception {
// TODO Auto-generated method stub
String subject = "帐户激活邮件。";
String nowTime = new SimpleDateFormat("yyyymmddHHmmss").format(new Date());// 当前时间
//生成激活码
String code=nowTime+ UUID.randomUUID().toString();
//生成内容
StringBuilder content = new StringBuilder();
content.append(",你好:");
content.append(" strong请在激活帐号以后,使用用户名密码登录。此邮件系统自动发送,请勿回复。/strong");
sendMail(address, subject, content.toString());
}
/**
* @Title: createSession
* @Description: TODO 创建mail session
* @return Session
*/
private Session createSession(){
//创建属性文件
Properties props=new Properties();
//设置协议
props.setProperty("mail.transport.protocol", protocol);
//设置是否认证
props.setProperty("mail.smtp.auth","true");
//设置smtp服务器地址
props.setProperty("mail.host", server);
//创建session
Session session = Session.getInstance(props,
new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(user,pass);
}
}
);
//是否打印mail字符串
session.setDebug(true);
return session;
}
/**
* @Title: createMessage
* @Description: TODO 创建邮件体
* @param session 邮件发送session
* @param address 邮件地址字符串 "\"张三\"zhangsan@163.com,"
* @param subject 邮件主题
* @param content 邮件内容(html)
* @param files 附件数组
* @throws Exception
* @return MimeMessage
*/
private MimeMessage createMessage(Session session, String address, String subject, String content, File[] files)throws Exception{
//创建邮件
MimeMessage message=new MimeMessage(session);
//设置发件人
message.setFrom(new InternetAddress(from));
//设置收件人
message.setRecipients(RecipientType.TO,
InternetAddress.parse(address)
);
//设置邮件主题
message.setSubject(subject);
//创建用于组合邮件正文和附件的MimeMultipart对象
MimeMultipart allMultipart=new MimeMultipart("mixed");
//创建代表邮件正文和附件的各个MimeBodyPart对象
MimeBodyPart contentPart=createContent(content);
allMultipart.addBodyPart(contentPart);
//创建附件
if(files!=null){
for(File file:files){
if(file.isFile()){
MimeBodyPart attchPart=createAttachment(file);
allMultipart.addBodyPart(attchPart);
}
}
}
//设置整个邮件内容为最终组合的MimeMultipart对象
message.setContent(allMultipart);
message.saveChanges();
return message;
}
/**
* @Title: createContent
* @Description: TODO 创建内容体
* @param body
* @throws Exception
* @return MimeBodyPart
*/
private MimeBodyPart createContent(String body)throws Exception{
//创建代表组合MIME消息的MimeMultipart对象,和将该MimeMultipart对象保存到MimeBodyPart对象
MimeBodyPart contentPart=new MimeBodyPart();
MimeMultipart contentMultipart=new MimeMultipart("related");
//创建用于保存HTML正文的MimeBodyPart对象,并将它保存到MimeMultipart中
MimeBodyPart htmlBodyPart=new MimeBodyPart();
htmlBodyPart.setContent(body,"text/html;charset=gb2312");
contentMultipart.addBodyPart(htmlBodyPart);
//将MimeMultipart对象保存到MimeBodyPart对象中
contentPart.setContent(contentMultipart);
return contentPart;
}
/**
* @Title: createAttachment
* @Description: TODO 创建附件体
* @param file
* @throws Exception
* @return MimeBodyPart
*/
private MimeBodyPart createAttachment(File file)throws Exception{
//创建保存附件的MimeBodyPart对象,并加入附件内容和相应信息
MimeBodyPart attachPart=new MimeBodyPart();
FileDataSource fds=new FileDataSource(file);
attachPart.setDataHandler(new DataHandler(fds));
attachPart.setFileName(MimeUtility.encodeText(fds.getName()));
return attachPart;
}
}
JAVA邮件发送的大致过程是这样的的:
1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。
2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。
3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。
4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。
5、使用javax.mail.Transport工具类发送邮件。
个人想法,请参考:
1.保存到文件夹吧,我觉得不用移除附件。 遇到有过滤附件的需求时再考虑吧。
2.存邮件表的应该是包含邮件列表页面显示的内容吧。内容之外的是不是就可以不在这张表里存了。比如抄送地址这种,就一并存到文件里吧,算是邮件头。查看的时候解析。
3.同意,exchange web就是这样的。
4.统一用utf8编码吧
5.这个不太清楚,不好意思。
6.中间有异常的话是不是要算成草稿。就是1(入库+写文件)2 发送 3 根据发送修改数据记录
7.不太清楚具体情况。debug一下呢? 内存中没有大数据的处理吧?