java mail 发送qq企业邮箱报错

gaoxiangyangwpy 2015-01-23 11:22:02
import java.security.GeneralSecurityException;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.sun.mail.util.MailSSLSocketFactory;

public class MailSend {

private Properties props = new Properties();

private String from;

private Authenticator auth = null;

public void setForm(String from){
this.from = from;
}

public void setSSLSecurity(){
String SSL_FACTORY="javax.net.ssl.SSLSocketFactory";

props.setProperty("mail.smtp.host","smtp.exmail.qq.com") ;
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false") ;
props.setProperty("mail.smtp.port","465") ;
props.setProperty("mail.smtp.socketFactory.port","465") ;
props.setProperty("mail.smtp.auth","true") ;
props.put("mail.smtp.starttls.enable","true");
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// also use following for additional safety
//props.put("mail.smtp.ssl.checkserveridentity", "true");
props.put("mail.smtp.ssl.socketFactory", sf);

}

//set security user name and password
public void setAuth(String userName, String userPassword){
auth = new MailAuthenticator(userName, userPassword);
setSSLSecurity();
setForm(userName);
}


public boolean sendMail(String toAddr, String ccAddr, String subject, String message) throws AddressException, MessagingException{
Session session = Session.getDefaultInstance(props, auth);
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] tos = InternetAddress.parse(toAddr);
msg.setRecipients(Message.RecipientType.TO, tos);
if(ccAddr != null){
InternetAddress[] cc = InternetAddress.parse(ccAddr);
msg.setRecipients(Message.RecipientType.CC, cc);
}
msg.setSubject(subject);
msg.setText(message);
Transport.send(msg);
return true;
}

public static void main(String[] args) {
MailSend ms = new MailSend();
ms.setAuth("**@***.com", "*****");
try {
ms.sendMail("*****@qq.com", null, "test ssl", "test ssl runing");
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


直接运行main方法是没问题的,,,是可以发送出去的,
但在web项目中使用就报错了,,,
导入的mail.jar是javamail-1.4.7.jar,从oracle官网上下载来的,
错误如下
javax.mail.AuthenticationFailedException: 550 ???*±????¨

at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at com.ssc.sysUtil.qqMail.MailSend.sendMail(MailSend.java:73)
at com.ssc.sysUtil.EmailSender.sendEmail(EmailSender.java:86)
at com.ssc.service.user.UserServiceImpl.addBindEmail(UserServiceImpl.java:464)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy11.addBindEmail(Unknown Source)
at com.ssc.web.user.person.UserBaseInfo.sendBindEmail(UserBaseInfo.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:722)
...全文
2061 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
的萨菲432 2016-05-23
  • 打赏
  • 举报
回复
你的密码这里是用的企业邮箱密码吗?我用了之后一直提示授权失败
李思苇 2015-09-30
  • 打赏
  • 举报
回复
我的问题已经解决,关键点在于发件人账号是个人免费邮箱时username可以不加@及其后面的,但是如果发件人账号是企业邮箱时,发件人账号必须加@及其后面的。 即个人免费邮箱可以如下:ms.setAuth("111111111", "password1"); 但是企业邮箱必须是这样:ms.setAuth("111111111@xxx.com","password1");
李思苇 2015-09-28
  • 打赏
  • 举报
回复
你的发件人地址也是QQ企业邮箱中的账号吗?为什么我用你的代码发送报错: javax.mail.AuthenticationFailedException: 454 Error: authentication failed, system busy at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:823) at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:756) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:673) at javax.mail.Service.connect(Service.java:317) at javax.mail.Service.connect(Service.java:176) at javax.mail.Service.connect(Service.java:125) at javax.mail.Transport.send0(Transport.java:194) at javax.mail.Transport.send(Transport.java:124) at com.dj.schedulejob.utils.MailSend.sendMail(MailSend.java:75) at com.dj.schedulejob.utils.MailSend.main(MailSend.java:84) 我的MailAuthenticator 类如下: public class MailAuthenticator extends Authenticator { private String user; private String pwd; public MailAuthenticator(String user, String pwd) { this.user = user; this.pwd = pwd; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, pwd); } }
  • 打赏
  • 举报
回复
怎么还乱码了...
gaoxiangyangwpy 2015-01-23
  • 打赏
  • 举报
回复
web项目调用代码如下:
	/**
	 * 发送电子邮件
	 * @param to 收信人
	 * @param subject 主题
	 * @param content 内容
	 * @throws MessagingException 
	 * @throws UnsupportedEncodingException 
	 */
	public static void sendEmail(String to,String subject,String content) throws UnsupportedEncodingException, MessagingException{
		MailSend ms = new MailSend();
		ms.setAuth(MAIL_FROM_ACCOUNT, MAIL_PASS);
		ms.sendMail(to, null, subject, content);
	}
gaoxiangyangwpy 2015-01-23
  • 打赏
  • 举报
回复
找到错误了,,, Session session = Session.getDefaultInstance(props, auth); 由于别的代码也用了jmail发了邮件,设置过props,这里调用的就是之前设置的props了,并没有用到这里设置的这些关于QQ企业邮箱的参数,将别的地方或都这里改成: Session session = Session.getDefaultInstance(props, auth);-----》Session.getInstance
*发现struts.multipart.maxSize和fileUpload拦截器的maximumSize属性分工不同,总结如下: 1.struts.multipart.maxSize掌控整个项目所上传文件的最大的Size。超过了这个size,后台报错, 程序处理不了如此大的文件。fielderror里面会有如下的提示: the request was rejected because its size (16272982) exceeds the configured maximum (9000000) 2.fileUpload拦截器的maximumSize属性必须小于struts.multipart.maxSize的值。 struts.multipart.maxSize默认2M,当maximumSize大于2M时, 必须设置struts.multipart.maxSize的值大于maximumSize。 3.当上传的文件大于struts.multipart.maxSize时,系统报错 当上传的文件在struts.multipart.maxSize和maximumSize之间时,系统提示: File too large: file "MSF的概念.ppt" "upload__5133e516_129ce85285f__7ffa_00000005.tmp" 6007104 当上传的文件小于maximumSize,上传成功。 //在写邮件发送之前应知道的有: //(需要导入两个jar包,一个mail.jar一个activation.jar, //到百度上搜索下载下来,添加到自己的工程中)SMTP和POP邮件协议是什么, //你就理解为一个事发送邮件的协议,一个是接受邮件的协议, //要发送邮件我们要用邮件服务器的SMTP协议的服务来发送邮件。 //还有就是目前为止好多的邮件服务器都已经不再向免费邮箱用户开通SMTP服务了, //所以在你进行代码发送邮件的时候先测试一下你用的邮箱服务器是否支持个人SMTP服务。 //以下代码使用QQ邮箱的SMTP服务来实现,在拷贝以下代码实现发送邮件时, //先到自己的QQ邮箱中设置自己的QQ支持SMTP,然后考取以下代码, //写入自己的QQ邮箱运行。。。。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧