当前位置: 首页 > 知识库问答 >
问题:

如何使用默认Javamail会话在WebSphere与GMail

公孙俊弼
2023-03-14

我试图在WebSphere7中创建一个javamail会话来使用GMail,但我的身份验证总是失败。

是的,伙计,我的密码可以...

我正在将会话配置为:

输出邮件属性

  • 提供商:内置邮件提供商

在会话属性中,我有:

  • mail.smtp.auth=true
  • mail.smtp.port=465
  • mail.smtp.starttls.enable=真
  • mail.smtp.socketFactory.port=465
  • mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

我正在使用一个测试JSP,类似于...

...
System.out.println("Entering MailJsp!");

String errorMessage = null;
String destinationAddress = request.getParameter("destinationAddress");
String messageBody = request.getParameter("message");
String subject = "Mail from MailServlet";
String emailFrom = "myuser@gmail.com"; 

// try only if it is not the first request
if (destinationAddress != null) {

    System.out.println("Sending email");
    try 
    {
        // look up MailSession
        Context context = new InitialContext();
        Session mailSession =  (Session)context.lookup("mail/session/Default");

        System.out.println("Mail Session Properties: " + mailSession.getProperties());
        Message msg = new MimeMessage(mailSession);
        msg.setFrom(new InternetAddress(emailFrom));
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(destinationAddress));

        // Set the subject and body text
        msg.setSubject(subject);
        msg.setText(messageBody);

        // send message
        Transport.send(msg);
        System.out.println("Email Sent");
    }
    catch (Exception e) 
    {
        System.out.println("Error sending Email: " + e);
        e.printStackTrace();
        errorMessage = e.getMessage() != null ? e.getMessage() : e.toString();
    }
}
System.out.println("Exiting MailJsp");

...

... 我的结果日志是:

Entering MailJsp!
Sending email
DEBUG: JavaMail version 1.4ea
DEBUG: java.io.FileNotFoundException: C:\environment\server\IBM\WAS7\AppServer\java\jre\lib\javamail.providers (The system cannot find the file specified.)
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.address.map
DEBUG: java.io.FileNotFoundException: C:\environment\server\IBM\WAS7\AppServer\java\jre\lib\javamail.address.map (The system cannot find the file specified.)
*** In SessionFactory.setPasswordAuthentication, TRANSPORT PasswordAuthentication is based on:
    url=smtp://myuser@gmail.com@smtp.gmail.com:465
    user=myuser@gmail.com
    password=********
*** In SessionFactory.getObjectInstance, session properties:
    mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
    mail.transport.protocol=smtp
    mail.imaps.class=com.sun.mail.imap.IMAPSSLStore
    mail.smtp.host=smtp.gmail.com
    mail.debug=true
    mail.from=myuser@gmail.com
    mail.pop3s.class=com.sun.mail.pop3.POP3SSLStore
    mail.smtp.starttls.enable=true
    mail.smtp.port=465
    mail.smtp.class=com.sun.mail.smtp.SMTPTransport
    mail.smtp.auth=true
    mail.smtps.class=com.sun.mail.smtp.SMTPSSLTransport
    mail.smtp.socketFactory.port=465
    mail.smtp.user=myuser@gmail.com
    mail.imap.class=com.sun.mail.imap.IMAPStore
    mail.mime.address.strict=true
    mail.pop3.class=com.sun.mail.pop3.POP3Store
Mail Session Properties: {mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory, mail.transport.protocol=smtp, mail.imaps.class=com.sun.mail.imap.IMAPSSLStore, mail.smtp.host=smtp.gmail.com, mail.debug=true, mail.from=myuser@gmail.com, mail.pop3s.class=com.sun.mail.pop3.POP3SSLStore, mail.smtp.starttls.enable=true, mail.smtp.port=465, mail.smtp.class=com.sun.mail.smtp.SMTPTransport, mail.smtp.auth=true, mail.smtps.class=com.sun.mail.smtp.SMTPSSLTransport, mail.smtp.socketFactory.port=465, mail.smtp.user=myuser@gmail.com, mail.imap.class=com.sun.mail.imap.IMAPStore, mail.mime.address.strict=true, mail.pop3.class=com.sun.mail.pop3.POP3Store}
DEBUG: mail.smtp.class property exists and points to com.sun.mail.smtp.SMTPTransport
DEBUG SMTP: useEhlo true, useAuth true
Error sending Email: javax.mail.AuthenticationFailedException
javax.mail.AuthenticationFailedException
    at javax.mail.Service.connect(Service.java:306)
    at javax.mail.Service.connect(Service.java:156)
    at javax.mail.Service.connect(Service.java:105)
    at javax.mail.Transport.send0(Transport.java:168)
    at javax.mail.Transport.send(Transport.java:98)
    at com.ibm._jsp._email._jspService(_email.java:127)
    at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:98)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1443)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1384)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:104)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:852)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:785)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
    at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121)
    at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:234)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3610)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:274)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:926)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766)
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
Exiting MailJsp

如果我以另一种方式使用,它会起作用!

Session mailSession =  (Session)context.lookup("mail/session/Default");
Properties props = mailSession.getProperties();

mailSession = Session.getDefaultInstance(
    props,
    new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("myuser@gmail.com","mypassword");
        }
    });

但是,我想使用管理控制台中设置的密码,而不是以编程方式提供。因此用户可以管理他们的密码。

有人能帮忙吗?

tks

共有2个答案

龙佐
2023-03-14

集成解决方案控制台

Mail Sessions > WPexchange > Custom properties > mail.smtp.port

Name: mail.smtp.port
Value: 587
余弘新
2023-03-14

您可以通过为gmail smtp添加singer证书来解决此问题:

  • 登录WebSphere的管理控制台
  • 保安-

问题是Websphere不信任gmail ssl证书,所以这是一个问题。我通过添加证书解决了同样的问题,希望您能从我的指导中受益

 类似资料:
  • 问题内容: 默认情况下,PHP会话是否超时-即,如果我没有任何编码,最终在一段时间不活动后最终将“注销”用户吗? 问题答案: 这取决于服务器配置或相关指令的session.gc_maxlifetime在。 通常情况下,默认值为24分钟(1440秒),但是您的虚拟主机可能已将默认值更改为其他值。

  • 尽管我意识到这不是“好”的做法--我有一个用例,我需要将Selenium驱动程序指向(连接)我的默认Chrome会话/配置文件。 如何将selenium连接到默认Chrome会话?这与通常打开Chrome时看到的会话相同。 我已经看过另一个问题,但是这里的答案没有解决如何将Selenium指向默认会话的问题。而且--这是一个过时的问题--从那以后,Chrome和Chromedriver有了很大的进

  • 所以我有一个三层应用程序。通过spring boot starter jpa自动配置hibernate。以及使用@EnableJpaRepositories(enttityManagerFactory、transactionManager、basepackages)的配置类 我的问题是,如果控制器调用从数据库获取实体的服务,那么该服务是否可以将该实体传递给其他组件,而不会分离,考虑到它仍然是同一个

  • 我有一个Spring启动应用程序,它由Azure AD oAuth2保护。我使用JWT授权。在安全配置中 我还将一些东西保存在会话中。但我发现,如果用户已经通过身份验证,他们可以绕过JWT身份验证,因为spring boot将身份验证保存在会话中。如何禁用此行为并仅允许通过JWT进行授权。

  • 在JSF2应用程序中,当文件中没有明确提到会话超时时,会话超时是什么? 更新:我正在使用Tomcat,请参阅此处有关Tomcat中默认超时的相关帖子。

  • 问题内容: 我的应用程序当前将Spring Session与Redis一起用作后端。 我搜索了Spring Session 的官方文档,但使用该模块时找不到默认的会话超时。 另外,我不确定如果需要如何更改默认超时。 有人可以请教吗? 问题答案: 使用Redis存储库时配置会话超时的最简单方法是 当存储库中不再有会话时,该会话将 过期 。可以同时在和上配置超时。默认值为 30分钟 。 如果您使用的是