在C#中为Gmail API创建邮件

我正在寻找在我正在使用的应用程序中使用Gmail API。 但是,我不确定如何将他们的Java或Python示例更改为C#。 现有样本究竟是如何转变的?

样本在这里找到。

这是一个棘手的问题需要解决,但我最终得到了它。 我使用NuGet包AE.Net.Mail来获取RFC 2822位。

 using System.IO; using System.Net.Mail; using Google.Apis.Gmail.v1; using Google.Apis.Gmail.v1.Data; public class TestEmail { public void SendIt() { var msg = new AE.Net.Mail.MailMessage { Subject = "Your Subject", Body = "Hello, World, from Gmail API!", From = new MailAddress("[you]@gmail.com") }; msg.To.Add(new MailAddress("yourbuddy@gmail.com")); msg.ReplyTo.Add(msg.From); // Bounces without this!! var msgStr = new StringWriter(); msg.Save(msgStr); var gmail = new GmailService(MyOwnGoogleOAuthInitializer); var result = gmail.Users.Messages.Send(new Message { Raw = Base64UrlEncode(msgStr.ToString()) }, "me").Execute(); Console.WriteLine("Message ID {0} sent.", result.Id); } private static string Base64UrlEncode(string input) { var inputBytes = System.Text.Encoding.UTF8.GetBytes(input); // Special "url-safe" base64 encode. return Convert.ToBase64String(inputBytes) .Replace('+', '-') .Replace('/', '_') .Replace("=", ""); } } 

相同的代码进行了一些进一步的分析和原因发布在这里: http : //jason.pettys.name/2014/10/27/sending-email-with-the-gmail-api-in-net-c/

这是我能够使用MimeKit工作的原因 。

 public void SendEmail(MyInternalSystemEmailMessage email) { var mailMessage = new System.Net.Mail.MailMessage(); mailMessage.From = new System.Net.Mail.MailAddress(email.FromAddress); mailMessage.To.Add(email.ToRecipients); mailMessage.ReplyToList.Add(email.FromAddress); mailMessage.Subject = email.Subject; mailMessage.Body = email.Body; mailMessage.IsBodyHtml = email.IsHtml; foreach (System.Net.Mail.Attachment attachment in email.Attachments) { mailMessage.Attachments.Add(attachment); } var mimeMessage = MimeKit.MimeMessage.CreateFromMailMessage(mailMessage); var gmailMessage = new Google.Apis.Gmail.v1.Data.Message { Raw = Encode(mimeMessage.ToString()) }; Google.Apis.Gmail.v1.UsersResource.MessagesResource.SendRequest request = service.Users.Messages.Send(gmailMessage, ServiceEmail); request.Execute(); } public static string Encode(string text) { byte[] bytes = System.Text.Encoding.UTF8.GetBytes(text); return System.Convert.ToBase64String(bytes) .Replace('+', '-') .Replace('/', '_') .Replace("=", ""); } 

@Eric Gmail Api缺乏,因为它要求消费者必须经历几次舞蹈才能做一些相对基本的事情。 对于.Net,它应该像填充Message对象(使用Subject,From,To,Body等)一样简单,并将该对象传递给处理编码的Send函数。

至少,Api文档应该提供一个完整的工作示例,不需要像MimeKit或AE.Net.Mail这样的第三方库。

注意:如果您收到电子邮件退回问题,可能是由于未设置ReplyToList字段。 请参阅: GMail API电子邮件弹跳

这似乎不是Gmail API的问题。 您应该寻找的是“c#create email”(可能添加“RFC 2822”,因为这是定义这些电子邮件格式的RFC)。 一旦你有了这样一个有效的“电子邮件”(你可以使用SMTP或IMAP等真实的整个电子邮件内容),那么将它与Gmail API一起使用应该是非常简单的。