Je tente de générer un brouillon Gmail dans une application WinForms en utilisant C#. Le brouillon de message doit être au format HTML et pouvoir contenir une pièce jointe.Brouillon Gmail (HTML avec pièce jointe) avec MimeKit, Winforms C# et API Google
J'ai été en mesure de générer un brouillon avec une pièce jointe en utilisant AE.Net.Mail
, mais le brouillon du message était en texte brut (je ne pouvais pas comprendre comment coder AE.Net.Mail
pour me donner un brouillon HTML Gmail). Pour tenter d'obtenir le message dans un format HTML, j'ai utilisé MimeKit pour prendre un message System.Net.Mail
et le convertir en un message MimeMessage
. Cependant, je n'arrive pas à comprendre comment envoyer le message MIME dans une chaîne codée en base64 formatée et sécurisée pour l'URL, conforme à la RFC 2822, comme l'exige le projet de spécification Gmail.
Voici le code de la MimeKit Conversion tentative:
var service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
MailMessage msg = new MailMessage(); //System.Net.Mail
msg.IsBodyHtml = true;
msg.Subject = "HTML Email";
msg.Body = "<a href = 'http://www.yahoo.com/'>Enjoy Yahoo!</a>";
msg.Attachments.Add(file);
MimeMessage message = MimeMessage.CreateFromMailMessage(msg); //MimeKit conversion
//At this point I cannot figure out how to get the MIME message into
//an RFC 2822 formatted and URL-safe base64 encoded string
//as required by the Gmail draft specification
//See working code below for how this works in AE.Net.Mail
Voici le code à l'aide AE.Net.Mail
qui fonctionne, mais génère le corps du projet de Gmail sous forme de texte (basé sur this article par Jason Pettys):
var service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
var msg = new AE.Net.Mail.MailMessage //msg created in plain text not HTML format
{
Body = "<a href = 'http://www.yahoo.com/'>Enjoy Yahoo!</a>"
};
var bytes = System.IO.File.ReadAllBytes(filePath);
AE.Net.Mail.Attachment file = new AE.Net.Mail.Attachment(bytes, @"application/pdf", FileName, true);
msg.Attachments.Add(file);
var msgStr = new StringWriter();
msg.Save(msgStr);
Message m = new Message();
m.Raw = Base64UrlEncode(msgStr.ToString());
Draft draft = new Draft(); //Gmail draft
draft.Message = m;
service.Users.Drafts.Create(draft, "me").Execute();
private static string Base64UrlEncode(string input)
{
var inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
// Special "url-safe" base64 encode.
return Convert.ToBase64String(inputBytes)
.Replace('+', '-')
.Replace('/', '_')
.Replace("=", "");
}
Est-il possible de convertir un message de MimeKit MimeMessage
dans une RFC 2822 formaté et URL -safe string encodé en base64 pour qu'il puisse être généré en tant que brouillon Gmail? A défaut, existe-t-il un moyen de créer un message AE.Net.Mail
au format HTML avant de l'encoder? Toute aide est grandement appréciée.
Vous avez plusieurs articles à propos de Brouillons API Gmail. avez-vous essayé de télécharger le brouillon ou le message au format EML? – Kiquenet
@ Kiquenet vous avez posé une question dans un commentaire précédent ci-dessous cette question, j'ai répondu dans un commentaire de réponse, puis les deux ont été supprimés. (Peut-être par vous?) Maintenant, vous postez la question ci-dessus dans un commentaire. Ma question dans ce post a été résolue il y a plus d'un an. Je ne sais pas pourquoi vous posez d'autres questions pour savoir si j'ai essayé le format EML. Mes questions ont été répondues. J'ai posté trois questions différentes. Deux ont reçu une réponse et un reste ouvert (que je devrais fermer et mettra sur ma liste de choses à faire).Merci de votre intérêt, mais je n'ai plus besoin d'aide pour cette question spécifique. – joeschwa