SuperAPI AI 工具集

mail-destinations

部署与运维

查看项目

更新于 10-16 10:15

技能介绍

Mail Session 技能用于在 Neo Java 应用迁移场景下,通过 Destination service 配置邮件会话。其目标是把 Neo 的 javax.mail.Session JNDI 资源替换为使用 Destination service 中邮件服务器配置手动创建的会话。

一、用途 该技能用于将依赖 JNDI 邮件会话的旧应用迁移到 Cloud Foundry,改为从 Destination service 读取邮件服务器配置并手动创建 jakarta.mail.Session。

二、检测方式 技能在以下模式出现时适用:web.xml 中的 <resource-ref>,res-ref-name 为 mail/Session、res-type 为 javax.mail.Session;Java 源码中导入 javax.mail.Session 与 javax.annotation.Resource,使用 @Resource(name = "mail/Session") 注入 Session,或通过 ctx.lookup("java:comp/env/mail/Session") 进行 JNDI 查找。

三、前置条件 工作目录必须位于由 jakarta-java25-migration 或 neo-to-cf-migration-orchestrator 创建的 -cf-migration 副本内;若当前目录不以 -cf-migration 结尾,需先切换。调用本技能前需先调用 sdk-replacement 技能(设置 SAP Cloud SDK,必需)、destinations 技能(配置 Destination service,必需);若涉及本地部署邮件服务器,还需 connectivity-onpremise 技能。

四、转换步骤

  1. 从 web.xml 移除 mail/Session 的 resource-ref。
  2. 在 pom.xml 添加依赖:Angus Mail(org.eclipse.angus:jakarta.mail)与 angus-activation,并声明相应版本属性。硬性规则是必须打包 Jakarta Mail 实现而非仅 API,否则运行时会在首次发送时抛出 No provider of jakarta.mail.util.StreamProvider was found(HTTP 500)。构建 WAR 后应确认 WEB-INF/lib 下包含 Angus Mail jar。
  3. 从 assets/session/ 复制邮件会话辅助类:MailSession.java、MailAuthenticator.java、MailPropertiesHandler.java、OnPremiseSMTPProvider.java、OnPremiseSMTPTransport.java、ConnectivitySocks5ProxySocket.java,复制到 src/main/java/com/example/document/,其中包名 com.example.document 为占位符,需改为项目自身包名。对于仅互联网邮件的简单场景,也可创建最小化的 MailSessionFactory.java(示例代码给出了从 Destination 读取 host、port、user、password 等属性并构建 Session 的完整实现)。
  4. 更新邮件发送代码:将 javax.* 导入改为 jakarta.*,移除 @Resource 注入,改为通过 MailSessionFactory.createSession("mail-destination") 创建会话;发送地址改为从 mail.smtp.from 或 mail.from 属性读取;必须使用 transport.connect(host, port, user, password) 显式传参,不能使用 Transport.send(message),因为后者不会从会话属性传递用户名/密码。
  5. 创建邮件 Destination:互联网邮件服务器需在 BTP Cockpit 中配置 Name、Type(HTTP)、URL(smtp://...)、Proxy Type(Internet)、Authentication(BasicAuthentication)、User、Password,以及 mail.smtp.host、mail.smtp.port、mail.smtp.auth、mail.smtp.starttls.enable、mail.smtp.from、mail.smtp.ssl.checkserveridentity 等附加属性;本地部署邮件服务器需将 Proxy Type 设为 OnPremise,并在 Cloud Connector 添加 TCP 资源映射(内部主机、内部端口、虚拟主机、虚拟端口)。发送地址应使用 mail.smtp.from,且需在 SMTP 提供商侧验证,不可硬编码 Neo 时代的地址。
  6. 更新 MTA 描述符:为模块声明 requires 指向 destination 资源,本地部署时另外声明 connectivity 资源;资源类型为 org.cloudfoundry.managed-service,destination 与 connectivity 均使用 lite 计划。

五、配置与验证 无需新增配置文件,邮件配置存放于 Destination。使用的 CF 服务为 destination(lite)和 connectivity(lite,本地部署时)。验证方式包括运行 mvn clean compile 编译检查、在 BTP Cockpit 测试 Destination 连接、通过 curl 调用 /mail 端点发送测试邮件、使用 cf logs 查看邮件相关日志。

六、常见问题 DestinationNotFoundException 通常因缺少 connectivity-destination-service 运行时依赖,需在 pom.xml 中以 runtime 作用域添加;MessagingException: Could not connect to SMTP host 通常是 Destination URL 或端口错误或 CF 无法访问邮件服务,需在 BTP Cockpit 核对属性并确认 SMTP 端口开放;AuthenticationFailedException 通常因未设置凭据或 Transport.connect() 未显式传入用户/密码,需从 Destination 属性中提取 User/mail.user 与 Password/mail.password 并显式传入。

七、限制 仅覆盖上述检测模式所对应的迁移场景;具体邮件服务器、端口、地址等配置需由用户按自身环境填写;辅助类包名需按项目实际调整;未在资料中给出的内容(如其他平台、其他认证方式)暂未提供。