不使用Jenkins时如何用Selenium WebDriver Java发送执行报告邮件
报错根因
Gmail 自2022年起已不再支持普通个人账号使用账号密码直接登录第三方应用进行SMTP发信,你遇到的登录拦截是该安全策略导致的,和你代码本身的逻辑无关。
现有Apache Commons Mail方案修复方式
不需要更换API,调整账号配置即可:
- 先为你的Google账号开启两步验证
- 进入Google账号安全页,生成应用专用密码(16位无空格字符串)
- 把代码中
password变量替换为生成的应用专用密码,原有代码无需其他修改即可正常发信
其他实现发信需求的可选方案
方案1:使用Jakarta Mail(原Java Mail)原生实现
不依赖Apache Commons Mail的场景下,可以直接用原生邮件API实现,代码示例如下:
import java.util.Properties; import jakarta.mail.*; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMessage; public class NativeMailSender { public static void main(String[] args) { String recipient = "myemail@gmail.com"; String sender = "user@gmail.com"; String smtpHost = "smtp.gmail.com"; // 替换为你的应用专用密码 String appPassword = "你的16位应用专用密码"; Properties config = new Properties(); config.put("mail.smtp.host", smtpHost); config.put("mail.smtp.port", "465"); config.put("mail.smtp.ssl.enable", "true"); config.put("mail.smtp.auth", "true"); Session mailSession = Session.getInstance(config, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(sender, appPassword); } }); try { MimeMessage mailContent = new MimeMessage(mailSession); mailContent.setFrom(new InternetAddress(sender)); mailContent.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); mailContent.setSubject("执行报告"); mailContent.setText("这是执行报告的正文内容"); Transport.send(mailContent); System.out.println("邮件发送成功"); } catch (MessagingException e) { e.printStackTrace(); } } }
方案2:使用云厂商邮件推送服务
如果需要更高的发信送达率、避免Gmail的权限限制,可以选择云厂商提供的邮件推送服务,这类服务都有配套的Java SDK,无需自行配置SMTP协议逻辑,只需要在平台配置发信域名、获取调用秘钥即可集成,适合批量发送执行报告的场景。
- 优势是无需处理邮箱账号的安全配置,发信成功率更高,还支持模板邮件、批量发信等扩展功能。
方案3:Spring Boot项目专用方案
如果你的项目基于Spring Boot开发,可以直接引入spring-boot-starter-mail起步依赖,通过配置文件统一管理参数,调用封装好的接口发信,代码更简洁。
配置文件示例(application.properties)
spring.mail.host=smtp.gmail.com spring.mail.port=465 spring.mail.username=user@gmail.com spring.mail.password=你的16位应用专用密码 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.ssl.enable=true
发信代码示例
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Component; @Component public class ReportMailSender { @Autowired private JavaMailSender javaMailSender; public void sendExecutionReport(String recipient, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("user@gmail.com"); message.setTo(recipient); message.setSubject("任务执行报告"); message.setText(content); javaMailSender.send(message); } }
内容的提问来源于stack exchange,提问作者vish176
相关产品推荐
相关产品推荐

