Gmail API:将电子邮件放入草稿并设置“请求已读回执”标志

问题描述 投票:0回答:1

我制作了这个小小的 .NET 软件,它可以获取 PDF,将其拆分为多个页面,并使用官方 API 在 Gmail 上创建几封电子邮件草稿,准备好检查和发送。

这是采用

GmailService
对象并创建草稿的方法:

private void CreateDraft(GmailService gmailService, MailDraft mailDraft)
{
    var mailMessage = new System.Net.Mail.MailMessage();
    
    mailMessage.To.Add(mailDraft.Recipients);
    mailMessage.Subject = mailDraft.Subject;
    mailMessage.Body = mailDraft.Body + "\r\n" + mailDraft.Signature;

    foreach (System.Net.Mail.Attachment attachment in mailDraft.Attachments)
    {
        mailMessage.Attachments.Add(attachment);
    }

    var mimeMessage = MimeKit.MimeMessage.CreateFromMailMessage(mailMessage);

    // Add Read Receipt request
    if(mailDraft.RequestReadReceipt)
    {
        // Note that this is correctly filled
        Profile currentUserProfile = gmailService.Users.GetProfile("me").Execute();
        string currentUserEmail = currentUserProfile.EmailAddress;

        mimeMessage.Headers.Add("Disposition-Notification-To", currentUserEmail);
    }

    var draft = new Draft
    {
        Message = new Google.Apis.Gmail.v1.Data.Message {
            Raw = Encode(mimeMessage)
        }
    };

    Draft createdDraft = gmailService.Users.Drafts.Create(draft, "me").Execute();
}

internal class MailDraft
{
    public string Recipients { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
    public string Signature { get; set; }

    public List<System.Net.Mail.Attachment> Attachments { get; set; }
    public bool RequestReadReceipt { get; set; }
}

正如您在代码中看到的,我在 mimeMessage 中设置了一个标头来请求已读回执,这就是

Disposition-Notification-To
,其值等于当前用户的电子邮件地址。

不幸的是,当我在 Gmail 中打开保存的草稿时,它没有将“已读回执”请求设置为打开:

请注意,如果我发送电子邮件而不是将其保存到草稿中(即另一侧请求阅读确认),则这完全有效。

有什么想法吗?

c# gmail-api
1个回答
1
投票

当向邮件添加自定义 MIME 标头并使用 GMail API 将其作为草稿插入时,最终会从邮件中删除附加标头。

我建议在问题跟踪器中将其报告为功能请求,但是已经打开了一个请求相同功能的功能。你可以在这里查看

© www.soinside.com 2019 - 2024. All rights reserved.