我正在UWP应用程序中使用Windows.ApplicationModel.Email.EmailManager.ShowComposeNewEmailAsync来发送电子邮件。参数是EmailMessage,为此我提供了收件人,主题和正文。
这很好,直到正文长度超过1200个字符为止。届时,电子邮件程序加载后,主体将被切断。在几个不同的电子邮件客户端中,问题都是相同的,因此,这似乎是对API的限制,而不是电子邮件客户端。
我已经检查了ShowComposeNewEmailAsync和EmailMessage的文档,但是它们都没有提到任何大小限制(或者就此而言,还有很多其他事情)。
有人知道这实际上是否是一个限制?如果是这样,有办法解决吗?我的邮件不是很大,但是其中一些邮件的长度必须超过1200个字符。
谢谢, 弗兰克
答案 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。
由于这是发送电子邮件的另一种方式,因此您可能需要查看此程序包是否支持更长的消息,否则在这里使用附件替代方法可能会起作用。