java - 使用 mail-service.xml 文件从 jboss 发送电子邮件

标签 java jboss jakarta-mail

我正在尝试从 jboss 发送邮件,同时从 mail-service.xml 文件获取 session 。

javax.naming.Context ictx = new javax.naming.InitialContext();
       Session mailSession = (Session) ictx.lookup("java:/Mail"); 

这是我的 mail-service.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!--DOCTYPE server-->
<!-- $Id: mail-service.xml,v 1.5 2003/08/27 04:34:12 patriot1burke Exp $ -->

<server>

  <!-- ==================================================================== -->
  <!-- Mail Connection Factory                                              -->
  <!-- ==================================================================== -->

  <mbean code="org.jboss.mail.MailService"
         name="jboss:service=Mail">
    <attribute name="JNDIName">java:/Mail</attribute>
    <attribute name="User">nobody</attribute>
    <attribute name="Password">password</attribute>
    <attribute name="Configuration">
       <!-- Test -->
       <configuration>

          <property name="mail.smtp.starttls.enable" value="true"/>
          <property name="mail.smtp.host" value="smtp.gmail.com"/>
          <property name="mail.smtp.user" value="***"/>
          <property name="mail.smtp.password" value="***"/>
          <property name="mail.smtp.port" value="587"/>
          <property name="mail.smtp.auth" value="true"/>
          <property name="mail.debug" value="true"/>
       </configuration>
    </attribute>
  </mbean>

</server>

但是我得到这个输出,说身份验证失败异常:

16:29:37,562 INFO  [STDOUT] 220 mx.google.com ESMTP ku7sm11540452pbc.31
16:29:37,578 INFO  [STDOUT] DEBUG SMTP: connected to host "smtp.gmail.com", port
: 587
16:29:37,578 INFO  [STDOUT] EHLO cl-4
16:29:38,000 INFO  [STDOUT] 250-mx.google.com at your service, [101.63.150.159]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
16:29:38,000 INFO  [STDOUT] DEBUG SMTP: Found extension "SIZE", arg "35882577"
16:29:38,000 INFO  [STDOUT] DEBUG SMTP: Found extension "8BITMIME", arg ""
16:29:38,000 INFO  [STDOUT] DEBUG SMTP: Found extension "STARTTLS", arg ""
16:29:38,000 INFO  [STDOUT] DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", a
rg ""
16:29:38,000 INFO  [STDOUT] STARTTLS
16:29:38,453 INFO  [STDOUT] 220 2.0.0 Ready to start TLS
16:29:38,718 INFO  [STDOUT] EHLO cl-4
16:29:40,750 INFO  [STDOUT] 250-mx.google.com at your service, [101.63.150.159]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
16:29:40,750 INFO  [STDOUT] DEBUG SMTP: Found extension "SIZE", arg "35882577"
16:29:40,765 INFO  [STDOUT] DEBUG SMTP: Found extension "8BITMIME", arg ""
16:29:40,765 INFO  [STDOUT] DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN
 XOAUTH"
16:29:40,765 INFO  [STDOUT] DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", a
rg ""
16:29:40,765 INFO  [STDOUT] DEBUG SMTP: Attempt to authenticate
16:29:40,765 INFO  [STDOUT] AUTH LOGIN
16:29:41,187 INFO  [STDOUT] 334 VXNlcm5hbWU6
16:29:41,187 INFO  [STDOUT] bm9b2R5
16:29:41,625 INFO  [STDOUT] 34 UGFzc3dvcmQ6
16:29:41,625 INFO  [STDOUT] cFzc3dvcmQ=
16:29:42,062 INFO  [STDOUT] 535-5.7.1 Username and Password not accepted. Learn
more at
535 5.7.1 http://support.google.com/mail/bin/answer.py?answer=14257 ku7sm1154045
2pbc.31
16:29:42,062 INFO  [STDOUT] in sendmail1 javax.mail.AuthenticationFailedExceptio
n

我搜索了这个问题,发现this关联。它建议应使用身份 validator 。但问题是,链接中的代码不使用 mail-service.xml 文件中的 session 。一切都被硬编码在程序本身中。从 mail-service.xml 获取 session 时应如何使用此身份 validator ?
编辑
我将“mail.smtp.user”和“mail.smtp.password”的值分别添加到mail-service.xml 文件中的用户和密码属性中。它开始工作了。

<server>

  <!-- ==================================================================== -->
  <!-- Mail Connection Factory                                              -->
  <!-- ==================================================================== -->

  <mbean code="org.jboss.mail.MailService"
         name="jboss:service=Mail">
    <attribute name="JNDIName">java:/Mail</attribute>
    <attribute name="User">***</attribute>
    <attribute name="Password">***</attribute>
    <attribute name="Configuration">
       <!-- Test -->
       <configuration>

          <property name="mail.smtp.starttls.enable" value="true"/>
          <property name="mail.smtp.host" value="smtp.gmail.com"/>
          <property name="mail.smtp.user" value="***"/>
          <property name="mail.smtp.password" value="***"/>
          <property name="mail.smtp.port" value="587"/>
          <property name="mail.smtp.auth" value="true"/>
          <property name="mail.debug" value="true"/>
       </configuration>
    </attribute>
  </mbean>

</server><br>

但是我已经在“mail.smtp.user”和“mail.smtp.password”值中给出了用户和密码。为什么它无法从那里读取它?它的存在就是为了这个目的,对吧?

最佳答案

理想情况下,JBoss 会设置 session 来为您进行身份验证,但如果这不起作用,您可以使用 Transport.connect 方法来指定用户名和密码。有关示例,请参阅 JavaMail 常见问题解答。

关于java - 使用 mail-service.xml 文件从 jboss 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11206272/

相关文章:

JavaMail 内容传输编码问题

java - 当另一个第一个方法返回 true 时如何调用第二个方法?

Java Rest api 需要等待才能处理

java - 为什么从服务器启动时出现 "Failed to define class"WARN?

Java - 如何验证用户名和密码

java - 使用javaMail读取共享邮箱

使用 Apache Mina 的 Java socketserver - 如何设置线程?

java - 如何在url中定义soap webservice名称?

java - 如何在 JBoss 应用服务器中创建数据源

grails - Acegi、Grails、JBoss、SSL 从 http<>https 来回