microsoftgraph / microsoftgraph/msgraph-sdk-java

Concurrent requests to send emails will generate duplicate emails, and the number does not match.

未关闭
#2,494 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

status:waiting-for-triage
主要语言
Java
星标
444
派生
154
平均合并
18 小时 28 分钟
30 天内合并 PR
4

描述

Hello!

I used Postman to iterate 160 times to send emails, and actually received 160+ emails. The number of emails received is random and does not match the number, which means duplicate emails are generated.

Image Image Image

@PostMapping("/test") public void SysEmailController() { GraphEmailSender.testInfo(); }

`

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.microsoft.graph.models.EmailAddress;
import com.microsoft.graph.models.ItemBody;
import com.microsoft.graph.models.Message;
import com.microsoft.graph.models.Recipient;
import com.microsoft.graph.serviceclient.GraphServiceClient;
import com.microsoft.graph.users.item.sendmail.SendMailPostRequestBody;

import java.util.Collections;
import java.util.List;

public class GraphEmailSender {
// 配置参数
private static final String CLIENT_ID = "";
private static final String CLIENT_SECRET = "";
private static final String TENANT_ID = "";
private static final String SENDER_EMAIL = "";
private static final String[] SCOPES = new String[] { "https://graph.microsoft.com/.default" };

private static GraphServiceClient graphClient;


static {
    try {
        final ClientSecretCredential credential = new ClientSecretCredentialBuilder()
                .clientId(CLIENT_ID)
                .tenantId(TENANT_ID)
                .clientSecret(CLIENT_SECRET)
                .build();

        if (null == credential) {
            throw new Exception("Unexpected error");
        }

        graphClient = new GraphServiceClient(credential, SCOPES);
    } catch (Exception e) {
        System.err.println("init GraphServiceClient error: " + e.getMessage());
        e.printStackTrace();
    }
}

public static void testInfo() {
    try {

        Message message = new Message();
        message.setSubject("test mail - Microsoft Graph API");

        ItemBody body = new ItemBody();
        body.setContent("Microsoft Graph API mail。");
        message.setBody(body);

        Recipient recipient = new Recipient();
        EmailAddress emailAddress = new EmailAddress();
        emailAddress.setAddress("");
        recipient.setEmailAddress(emailAddress);
        List<Recipient> recipients = Collections.singletonList(recipient);
        message.setToRecipients(recipients);

        SendMailPostRequestBody sendMailPostRequestBody =
                new SendMailPostRequestBody();
        sendMailPostRequestBody.setMessage(message);

        //
        graphClient.users()
                .byUserId(SENDER_EMAIL)
                .sendMail()
                .post(sendMailPostRequestBody);

        System.out.println("send success!"+Thread.currentThread());

    } catch (Exception e) {
        System.err.println("error: " + e.getMessage());
        e.printStackTrace();
    }
}

}`

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从提供的入口点 @PostMapping("/test") 和 GraphEmailSender.testInfo() 开始,然后使用所示的 Microsoft Graph 客户端代码重现 160 个并发 sendMail 请求。比较请求数和投递数,以确定该行为发生在 SDK 中还是调用应用程序中。完成标准是发现一个可复现的 SDK 缺陷并提供一个针对性测试,或者有明确证据表明无需修改 SDK。

由索引模型根据 Issue 内容生成。

评估

技术栈
java
领域
api
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
需要澄清
新手友好度
25/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。