Beh, ho una brutta notizia per voi
non è possibile farlo. utilizzando EmailManager.ShowComposeNewEmailAsync
Per quanto riguarda usando SetBodyStream
con EmailMessageBodyKind.Html
, abbiamo questa from MSDN forum:
Attualmente, l'EmailMessageBodyKind.Html non funzionerà per creare una nuova e-mail HTML e non c'è altro modo per ovviare al problema, ho controllato la risorsa interna , questa API è utilizzata per popolare i messaggi dal server delle app e salva il messaggio di posta elettronica nella cartella locale.
La cosa è: EmailManager.ShowComposeNewEmailAsync
utilizza mailto
per inviare il messaggio e, come indicato in some other question already answered here:
sezione 2 del RFC 2368 dice che il campo corpo dovrebbe essere in formato testo/plain, quindi non puoi fare HTML.
Tuttavia, anche se si utilizza un testo normale, è possibile che alcuni client di posta moderna visualizzino comunque il collegamento risultante come collegamento selezionabile, .
Detto questo, ti stai affidando al client di posta per renderlo HTML.
L'ho provato utilizzando Windows 10 Mail Client, Gmail e Outlook (entrambi i successivi su un browser Web) e tutti non sono riusciti a rendere un semplice tag HTML <b>
sul corpo della posta, mostrandolo come testo normale.
Ora, per le alternative (da that same MSDN forum thread):
Si noti che se uso lo ShareDataContract (DataTransferManager), io sono in grado di impostare il codice HTML nella richiesta e apparirà nella e-mail corpo se l'utente sceglie di condividere via Mail. Tuttavia mi piacerebbe saltare l'interfaccia utente Condividi e andare direttamente con la composizione di un messaggio di posta elettronica con il destinatario già compilato, corpo HTML e allegati immagine.
Un'alternativa è quella di persistere il corpo HTML in un file e quindi includere che file come allegato aggiuntivo, tuttavia, che non è l'ideale
Il DataTransferManager
formattata correttamente il messaggio HTML. Ecco un piccolo esempio di come il vostro codice di esempio sarà simile, adattato 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);
}
I limiti di questo approccio sono:
- Non si può obbligare l'utente a selezionare e-mail come la condivisione opzione
- Non è possibile specificare in precedenza il destinatario della posta.
forse è necessario reimpostare il puntatore di ricerca dopo aver scritto nello stream. –
Sì, l'avevo provato, ma sfortunatamente aggiungendo memStream-> Seek (0); (prima di EmailManager :: ShowComposeNewEmailAsync (email); call of course) non ha alcun effetto. – Kookei