Win 10 UWP EmailMessage API是否支持HTML正文?

Win 10 UWP EmailMessage API是否支持HTML正文?,html,email,windows-runtime,c++-cx,uwp,Html,Email,Windows Runtime,C++ Cx,Uwp,我已尝试使用以下代码从通用Windows平台应用程序发送电子邮件。当我使用EmailMessageBodyKind::PlainText时,它工作正常。但是,如下面代码所示,EmailMessageBodyKind::Html似乎启动了没有内容的电子邮件客户端。有人知道还有什么需要设置才能让它工作吗?文档是稀疏的8( 使用名称空间Windows::Storage::Streams; 使用名称空间Windows::ApplicationModel::Email; 使用名称空间Windows::Se

我已尝试使用以下代码从通用Windows平台应用程序发送电子邮件。当我使用EmailMessageBodyKind::PlainText时,它工作正常。但是,如下面代码所示,EmailMessageBodyKind::Html似乎启动了没有内容的电子邮件客户端。有人知道还有什么需要设置才能让它工作吗?文档是稀疏的8(

使用名称空间Windows::Storage::Streams;
使用名称空间Windows::ApplicationModel::Email;
使用名称空间Windows::Security::Cryptography;
自动bin=加密缓冲区::ConvertStringToBinary(
L“这是文本”,
二进制字符串编码::Utf16LE);
auto memStream=ref new INMEMORYRANDOMACCESS STREAM();
并发::创建_任务(memStream->WriteAsync(bin))。然后(
[memStream](未签名)
{
自动电子邮件=ref new EmailMessage();
电子邮件->收件人->附加(参考新电子邮件收件人(L)test@gmail.com"));
电子邮件->主题=L“电子邮件报告”;
auto-randomAccessStreamReference=randomAccessStreamReference::CreateFromStream(memStream);
email->SetBodyStream(EmailMessageBodyKind::Html,randomAccessStreamReference);
EmailManager::ShowComposeNewEmailAsync(电子邮件);
}
);

好吧,我有个坏消息要告诉你

无法使用电子邮件管理器执行此操作。showcomposenewmailasync

关于将
SetBodyStream
EmailMessageBodyKind.Html
一起使用,我们有以下内容

目前,EmailMessageBodyKind.Html无法用于创建新的 HTML电子邮件,没有其他解决方法,我已经检查过了 内部资源,此API用于填充来自 并将电子邮件保存到本地文件夹中

问题是:
EmailManager.showcomponsenewemailasync
使用
mailto
发送消息,如中所述:

第2节说身体区域应该在 文本/纯格式,因此不能使用HTML

然而,即使使用纯文本,也有可能出现一些现代邮件 无论如何,客户端都会将生成的链接呈现为可单击链接, 不过

也就是说,您依赖邮件客户端为您呈现HTML。
我已经使用Windows10邮件客户端、Gmail和Outlook(都是后来的web浏览器)对此进行了测试,但它们都未能在邮件正文上呈现一个简单的HTML
标记,而是将其显示为纯文本

现在,对于备选方案(来自):

请注意,如果使用ShareDataContract(DataTransferManager),则 能够在请求中设置HTML,它将显示在电子邮件中 如果用户选择通过邮件共享,则返回正文。但是,我希望 跳过共享UI,直接使用编写电子邮件 收件人已填充、HTML正文和图像附件

另一种方法是将HTML正文持久化到文件中,然后包括 该文件作为附加附件,但这并不理想

DataTransferManager成功格式化了HTML消息。以下是示例代码的一个小示例:

void YourView::ShareHtml()
{
DataTransferManager^DataTransferManager=DataTransferManager::GetForCurrentView();
自动dataRequestedToken=dataTransferManager->DataRequested+=
参考新类型Deventhandler(
这,&YourView::OnShareHtml);
DataTransferManager::ShowShareUI();
}
void YourView::OnShareHtml(DataTransferManager^sender,DataRequestedEventArgs^e)
{
数据请求^request=e->request;
请求->数据->属性->标题=“电子邮件报告”;
字符串^html=L“这是文本”;
字符串^htmlFormat=HtmlFormatHelper::CreateHtmlFormat(html);
请求->数据->设置htmlFormat(htmlFormat);
}
这种方法的局限性是:

  • 您不能强制用户选择电子邮件作为共享选项
  • 以前不能指定邮件收件人

  • 可能在写入流之后需要重新设置seek指针。是的-我已经尝试过了-但不幸的是添加memStream->seek(0);(在EmailManager::ShowComposeNewEmailAsync(电子邮件);调用之前)没有任何效果。
    using namespace Windows::Storage::Streams;
    using namespace Windows::ApplicationModel::Email;
    using namespace Windows::Security::Cryptography;
    auto bin = CryptographicBuffer::ConvertStringToBinary(
        L"<html><body>this <b>is</b> text</body></html>",
        BinaryStringEncoding::Utf16LE);
    auto memStream = ref new InMemoryRandomAccessStream();
    concurrency::create_task(memStream->WriteAsync(bin)).then(
        [memStream](unsigned)
        {
            auto email = ref new EmailMessage();
            email->To->Append(ref new EmailRecipient(L"test@gmail.com"));
            email->Subject = L"Email Report";
            auto randomAccessStreamReference = RandomAccessStreamReference::CreateFromStream(memStream);
            email->SetBodyStream(EmailMessageBodyKind::Html, randomAccessStreamReference);
            EmailManager::ShowComposeNewEmailAsync(email);
        }
    );
    
    void YourView::ShareHtml()
    {
        DataTransferManager^ dataTransferManager = DataTransferManager::GetForCurrentView();
        auto dataRequestedToken = dataTransferManager->DataRequested += 
            ref new TypedEventHandler<DataTransferManager^, DataRequestedEventArgs^>(
                this, &YourView::OnShareHtml);
        DataTransferManager::ShowShareUI();
    }
    
    void YourView::OnShareHtml(DataTransferManager^ sender, DataRequestedEventArgs^ e)
    {
        DataRequest^ request = e->Request;
        request->Data->Properties->Title = "Email Report";
    
        String^ html = L"<html><body>this <b>is</b> text</body></html>";
        String^ htmlFormat = HtmlFormatHelper::CreateHtmlFormat(html);
        request->Data->SetHtmlFormat(htmlFormat);
    }