UWP 下如何发邮件?可以使用mailto:xx?subject=*方式发送? 本文:如何在 UWP 使用默认邮件发邮件。

打开设置,应用,默认应用,选择应用 OutLook。这样就和我的一样,如果出错了,那么是邮件不支持。

首先需要找联系人,联系人可以在用户联系找。

            //找到一个联系人
            //如果是需要用户选发送到哪个联系人,使用下面方法
            var contactPicker = new ContactPicker();
            contactPicker.SelectionMode = ContactSelectionMode.Fields;//选择联系人一个项
            contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);//选择email
            Contact contact = await contactPicker.PickContactAsync();

让用户选择有email的联系,不选择一个联系全部。这句话说的是,在用户选择联系人之后,让他选择联系人的一个项。

选择联系人,选择一个邮箱

如果指定一个联系人让用户发送,如开发者,可以直接写自己的邮箱

            contact = new Contact()
            {
                Emails =
                {
                    new ContactEmail()
                    {
                        Address = "lindexi_gd@163.com",
                        Description = "UWP 开发者",
                    }
                }
            };

然后需要填写主题,内容。可以添加附件,注意附件添加是 StorageFile 。

可以看到,需要写的代码很多,我需要 写一个类来发送,首先使用Windows.ApplicationModel.Email

    using Windows.ApplicationModel.Contacts;
    using Windows.ApplicationModel.Email;

需要主题和内容

            var emailMessage = new EmailMessage();

            emailMessage.Subject = subject;
            emailMessage.Body = messageBody;

如果需要使用附件, 如何读取 StorageFile ?

            if (attachmentFile != null)
            {
                var stream = RandomAccessStreamReference.CreateFromFile(attachmentFile);

                var attachment = new EmailAttachment(
                    attachmentFile.Name,
                    stream);

                emailMessage.Attachments.Add(attachment);
            }

然后添加收件人

            var email = recipient.Emails.FirstOrDefault<ContactEmail>();
            if (email != null)
            {
                var emailRecipient = new EmailRecipient(email.Address);
                emailMessage.To.Add(emailRecipient);
            }

假如发给多个人,使用 emailMessage.To.Add list

发邮件很简单,await EmailManager.ShowComposeNewEmailAsync(emailMessage);就可以让用户发邮件

如果默认不是wr的,那么发送邮件可以出错,不是所有的软件都支持,于是可以使用另一个方式:

mailto:{email}?subject={subject}&body={messageBody}

如果遇到messageBody有换行可以看到这个方法没有换行。

UWP 发送邮件内容如何换行,messageBody 用的是 html ,所以使用 Uri.EscapeDataString

我写了一个函数,多谢 李继龙 大神,可以传入 email 主题 内容就可以发送

        private async Task UniversallyEmail(string email, string subject, string messageBody)
        {
            messageBody = Uri.EscapeDataString(messageBody); 用于换行
            string url = $"mailto:{email}?subject={subject}&body={messageBody}";
            await Launcher.LaunchUriAsync(new Uri(url));
        }

代码:http://download.csdn.net/detail/lindexi_gd/9757862

参见:https://docs.microsoft.com/en-us/windows/uwp/contacts-and-calendar/sending-email


本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/win10-UWP-%E5%8F%91%E9%82%AE%E4%BB%B6.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 lindexi (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系