ShowComposeNewEmailAsync是否具有最大正文长度?

时间:2020-09-14 18:09:02

标签: uwp

我正在UWP应用程序中使用Windows.ApplicationModel.Email.EmailManager.ShowComposeNewEmailAsync来发送电子邮件。参数是EmailMessage,为此我提供了收件人,主题和正文。

这很好,直到正文长度超过1200个字符为止。届时,电子邮件程序加载后,主体将被切断。在几个不同的电子邮件客户端中,问题都是相同的,因此,这似乎是对API的限制,而不是电子邮件客户端。

我已经检查了ShowComposeNewEmailAsync和EmailMessage的文档,但是它们都没有提到任何大小限制(或者就此而言,还有很多其他事情)。

有人知道这实际上是否是一个限制?如果是这样,有办法解决吗?我的邮件不是很大,但是其中一些邮件的长度必须超过1200个字符。

谢谢, 弗兰克

2 个答案:

答案 0 :(得分:0)

EmailManager.ShowComposeNewEmailAsync实际上是通过mailto:协议调用邮件应用程序的。

因此,此字符限制应为相应邮件应用程序或服务的最大URL长度限制。例如Maximum URL length is 2,083 characters in Internet Explorer

作为替代方案,可以在判断当前字符超过1200时转换为附件以发送。

public async Task SendMailAsync(string receiver,string subject,string msg)
{
    EmailMessage emailMessage = new EmailMessage();
    emailMessage.To.Add(new EmailRecipient(receiver));
    emailMessage.Subject = subject;
    int length = msg.Length;
    if (length > 1200)
    {
        string messageBody = "Please check the attachment";
        emailMessage.Body = messageBody;
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        StorageFile attachmentFile = await localFolder.CreateFileAsync("TempMail.txt", CreationCollisionOption.ReplaceExisting);
        await FileIO.WriteTextAsync(attachmentFile, msg);
        if (attachmentFile != null)
        {
            var stream = Windows.Storage.Streams.RandomAccessStreamReference.CreateFromFile(attachmentFile);
            var attachment = new EmailAttachment(
                     attachmentFile.Name,
                     stream);
            emailMessage.Attachments.Add(attachment);
        }
    }
    else
    {
        emailMessage.Body = msg;
    }
    await EmailManager.ShowComposeNewEmailAsync(emailMessage);
}

更新

使用EmailAttachment类添加到电子邮件中的附件仅显示在“邮件”应用程序中。如果用户将其他任何邮件程序配置为默认邮件程序,则将显示“撰写”窗口,不包含附件。这是一个已知问题。

答案 1 :(得分:0)

Richard Zhang为您的问题提供了一个很好的解决方案,但这仅在使用Windows Mail应用程序时有效。
既然您提到使用Outlook,那么您可以看看MsgKit

由于这是发送电子邮件的另一种方式,因此您可能需要查看此程序包是否支持更长的消息,否则在这里使用附件替代方法可能会起作用。