use*_*970 5 java smtp jakarta-mail
这是我发送邮件的代码
package com.markEffy.aggregator.util;
import com.sun.mail.util.MailSSLSocketFactory;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EmailAgent {
private static final String SMTP_HOST_NAME = "smtp.zoho.com";
private static final String SMTP_PORT = "465";
private static final String emailFromAddress = "support@jiffie.in";
private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
private String emailMsgTxt;
private String emailSubjectTxt;
private String[] sendTo = {""};
private int msgBodyType;
public EmailAgent (String sendToAddr, int msgType) throws Exception {
this.sendTo[0] = new String(sendToAddr);
this.msgBodyType = msgType;
}
public EmailAgent (String sendToAddr, String emailMsgTxt, String emailSubjectTxt) throws Exception {
this.sendTo[0] = new String(sendToAddr);
this.emailMsgTxt = emailMsgTxt;
this.emailSubjectTxt = emailSubjectTxt;
}
public EmailAgent(String[] recipients, int msgType) {
// TODO Auto-generated constructor stub
this.sendTo = new String[recipients.length];
for(int i=0;i<recipients.length;i++){
this.sendTo[i]=recipients[i];
}
this.msgBodyType=msgType;
}
public void sendMail() throws Exception {
//System.out.println("inside send mail");
MailSSLSocketFactory sf = new MailSSLSocketFactory();
//Check if valid arguments are passed
if ((this.sendTo == null)) {
System.out.println ("Invalid arguments!");
return;
}
int msgType = this.msgBodyType;
new EmailAgent(sendTo, msgType).sendSSLMessage(sendTo, emailSubjectTxt, emailMsgTxt,
emailFromAddress, sf);
System.out.println("Sucessfully Sent mail to All Users");
}
public void sendSSLMessage(String recipients[], String subject,
String message, String from , MailSSLSocketFactory sf) throws MessagingException {
boolean debug = true;
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "true");
props.put("mail.smtp.port", SMTP_PORT);
props.put("mail.smtp.socketFactory.port", SMTP_PORT);
props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
props.put("mail.smtp.socketFactory.fallback", "false");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator()
{
protected PasswordAuthentication
getPasswordAuthentication() {
return new
PasswordAuthentication("support@jiffie.in", "support@1234$");
}
});
session.setDebug(debug);
Message msg = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++) {
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在 tomcat 的 lib 文件夹中添加了mail.jar和 。我将 eclipse 与 tomcat 7、jre 7 和 struts2 一起使用。通过 Java 发送邮件时出现以下控制台错误:activation.jar
调试:JavaMail 版本 1.5.2
调试:成功加载资源:/META-INF/javamail.default.providers
:加载的提供者表
调试:按类名称列出的提供程序:{com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp。 SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail .imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore =javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail. pop3.POP3Store,Oracle]}
调试:按协议列出的提供程序:{imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail .imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail .pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail .smtp.SMTPTransport,Oracle]}
调试:成功加载资源:/META-INF/javamail.default.address.map
调试:setDebug:JavaMail 版本 1.5.2
调试: getProvider() 返回 javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG:加载提供程序时出现异常,THROW:
java.lang.NoSuchMethodException: com.sun.mail.smtp.SMTPTransport.(javax.mail.Session, javax.mail.URLName)
在 java.lang.Class.getConstructor0(来源未知)
在 java.lang.Class.getConstructor(来源未知)
在 javax.mail.Session.getService(Session.java:813)
在 javax.mail.Session.getTransport(Session.java:742)
在 javax.mail.Session.getTransport(Session.java:682)
在 javax.mail.Session.getTransport(Session.java:662)
在 javax.mail.Session.getTransport(Session.java:719)
在 javax.mail.Transport.send0(Transport.java:248)
在 javax.mail.Transport.send(Transport.java:124)
在 com.markEffy.aggregator.util.EmailAgent.sendSSLMessage(EmailAgent.java)
在 com.markEffy.aggregator.util.EmailAgent.sendMail(EmailAgent.java)
在 com.markEffy.aggregator.web.RetrievePasswordAction.sendPasswordToEmail(RetrievePasswordAction.java)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在 sun.reflect.NativeMethodAccessorImpl.invoke(来源未知)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(来源未知)
在 java.lang.reflect.Method.invoke(来源未知)
在 com.opensymphony.xwork2.DefaultActionInspiration.invokeAction(DefaultActionInspiration.java:450)
在 com.opensymphony.xwork2.DefaultActionInvocau.invokeActionOnly(DefaultActionInvocau.java:289)
在 com.opensymphony.xwork2.DefaultActionInvocau.invoke(DefaultActionInvocau.java:252)
在 org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
在org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
在 com.opensymphony.xwork2.DefaultActionInspiration.invoke(DefaultActionInspiration.java:246)
在 org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
在org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
在org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
在 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源未知)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(来源未知)
在 java.lang.Thread.run(来源未知)
阅读导致 NoSuchProviderException 的多个版本的 javamail jar中的所有答案。
您还可以修改代码以在发送期间设置上下文类加载器来解决此问题:
Thread t = Thread.currentThread();
ClassLoader ccl = t.getContextClassLoader();
t.setContextClassLoader(session.getClass().getClassLoader());
try {
Transport.send(msg);
} finally {
t.setContextClassLoader(ccl);
}
Run Code Online (Sandbox Code Playgroud)
所以,我刚刚在这里测试了您的代码,可以与以下两个邮件工件 com.sun.mail:javax.mail:1.5.2 和 javax.mail:javax.mail-api:1.5.2 完美配合。邮件工件的部分和实现部分同步。因此,要么将 mailapi-1.5.2 更改为 mailapi-1.4.7,要么将 javamail impl 从 1.4.7 更新到 1.5.2。
| 归档时间: |
|
| 查看次数: |
5795 次 |
| 最近记录: |