You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JMeter使用密钥向outlook.office365.com发送邮件

解决JMeter使用Client ID/密钥连接Office 365 SMTP发送邮件的问题

因为JMeter原生的SMTP Sampler并不支持OAuth 2.0认证(这是Office 365当前推荐的SMTP认证方式,尤其是服务账号/客户端凭证场景),所以我们需要分两步实现:先获取OAuth 2.0访问令牌,再通过Groovy代码结合JavaMail API完成邮件发送。

步骤1:获取OAuth 2.0访问令牌

我们可以通过Office 365的客户端凭证流(Client Credentials Flow),用你的Client ID和密钥获取访问令牌,具体操作如下:

  1. 在JMeter中添加一个HTTP Request Sampler,配置信息如下:

    • 请求方法:POST
    • 请求URL:https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token

      小提示:如果不知道租户ID,可用common临时替代,但更推荐使用具体租户ID以避免权限范围问题

    • 内容编码:UTF-8
    • 请求参数(添加到「Parameters」面板):
      • grant_type: client_credentials
      • client_id: 你的Client ID
      • client_secret: 你的密钥
      • scope: https://outlook.office365.com/.default
  2. 为这个HTTP请求添加一个JSON Extractor(作为子节点),提取返回的令牌:

    • 引用名称:access_token
    • JSON Path表达式:$.access_token
    • 匹配数字:1

步骤2:用JSR223 Sampler编写Groovy代码发送邮件

JMeter的JSR223 Sampler支持Groovy脚本,我们可以用它结合JavaMail API实现OAuth认证的邮件发送:

  1. 确保JMeter的lib目录下有以下依赖包(没有的话需要手动添加):

    • jakarta.mail.jar(或旧版mail.jar)
    • jakarta.activation.jar(或旧版activation.jar)

    提示:这些包可以从Maven仓库下载,推荐使用最新稳定版本

  2. 添加一个JSR223 Sampler,选择语言为groovy,然后在脚本区域输入以下代码:

import jakarta.mail.*
import jakarta.mail.internet.*
import java.util.Properties

// 配置SMTP服务器参数
Properties props = new Properties()
props.put("mail.smtp.host", "smtp.office365.com")
props.put("mail.smtp.port", "587")
props.put("mail.smtp.auth", "true")
props.put("mail.smtp.starttls.enable", "true")
props.put("mail.smtp.auth.mechanisms", "XOAUTH2")

// 配置OAuth2认证逻辑
Session session = Session.getInstance(props, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        // 传入空用户名+提取到的access_token
        return new PasswordAuthentication("", vars.get("access_token"))
    }
})

try {
    // 构建邮件内容
    MimeMessage message = new MimeMessage(session)
    message.setFrom(new InternetAddress("你的发件邮箱@domain.com")) // 必须是应用有权限发送的邮箱
    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("收件人邮箱@domain.com"))
    message.setSubject("JMeter OAuth2测试邮件")
    message.setText("这是通过JMeter结合OAuth2认证发送的测试邮件内容")

    // 发送邮件
    Transport.send(message)
    log.info("邮件发送成功!")
} catch (MessagingException e) {
    log.error("邮件发送失败: " + e.getMessage())
    throw e
}

关键注意事项:

  • 你的Azure AD应用必须已被授予SMTP.Send的应用权限(在Azure门户的应用注册中配置权限并完成管理员同意)
  • 发件邮箱必须是应用被允许代表发送的邮箱(客户端凭证流场景下,通常需要提前配置邮箱的发送权限)
  • 可以添加Debug Sampler验证access_token变量是否被正确提取

内容的提问来源于stack exchange,提问作者themaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:15:57