Cóż, mam złe wieści dla ciebie
To nie jest możliwe, aby to zrobić. stosując EmailManager.ShowComposeNewEmailAsync
Odnośnie korzystania SetBodyStream
z EmailMessageBodyKind.Html
, mamy ten from MSDN forum:
Obecnie program EmailMessageBodyKind.Html nie będzie działał w celu utworzenia nowej wiadomości e-mail w formacie HTML i nie ma innej możliwości obejścia tego problemu. Sprawdziłem wewnętrzny zasób, który został sprawdzony przez . Ten interfejs API służy do zapełniania wiadomości z serwera aplikacji i zapisz wiadomość e-mail w folderze lokalnym.
Chodzi o to: EmailManager.ShowComposeNewEmailAsync
wykorzystuje mailto
aby wysłać wiadomość i, jak stwierdzono w some other question already answered here:
Sekcja 2 RFC 2368 mówi, że pole ciało ma być w text/plain formacie więc nie możesz zrobić HTML.
Jednak nawet jeśli używasz zwykłego tekstu, możliwe jest, że niektórzy nowocześni klienci pocztowi będą renderować wynikowy odnośnik jako klikalny link, .
Mówiąc to, polegasz na kliencie pocztowym, aby renderować ten HTML.
Przetestowałem to za pomocą klienta poczty systemu Windows 10, Gmaila i programu Outlook (zarówno późniejszego w przeglądarce internetowej), a wszystkie z nich nie renderowały prostego znacznika HTML <b>
w treści wiadomości, pokazując go jako zwykły tekst.
Teraz dla alternatyw (z that same MSDN forum thread):
Należy pamiętać, że w przypadku korzystania z ShareDataContract (DataTransferManager), jestem stanie ustawić HTML we wniosku i pojawi się w e-mailu treść, jeśli użytkownik zdecyduje się udostępnić za pośrednictwem poczty. Jednak chciałbym pomijać interfejs udostępniania i przejść bezpośrednio do komponowania wiadomości e-mail z już wypełnionym odbiorcą, treścią HTML i załącznikami do obrazów.
Jedną z alternatyw jest utrzymywać ciało HTML do pliku, a następnie dołączyć że plik jako dodatkowego zajęcia, jednak, że nie jest idealny
DataTransferManager
powodzeniem sformatowane wiadomości w formacie HTML. Oto mała próbka tego, jak Twój przykładowy kod będzie wyglądać, dostosowany from MSDN:
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);
}
ograniczeń tego podejścia są:
- Nie można zmusić użytkownika, aby zaznaczyć wiadomość jako dzielenie opcja
- Nie można wcześniej określić adresata wiadomości e-mail.
Może trzeba ponownie ustawić wskaźnik wyszukiwania po napisaniu do strumienia. –
Tak - próbowałem tego - ale niestety dodawałem memStream-> Seek (0); (przed programem EmailManager :: ShowComposeNewEmailAsync (e-mail), wywołanie kursu) nie ma żadnego efektu. – Kookei