GMAIL API在c#中发送带附件的电子邮件

时间:2014-10-16 06:47:13

标签: gmail-api

我需要帮助,使用c#中的Gmail Api发送带有/附件的电子邮件。

我已经阅读了Google网站,发送带附件的电子邮件,但示例是在java中。

3 个答案:

答案 0 :(得分:1)

我在VB.net中有一个例子。 GMail API Emails Bouncing

Google页面仅提供Java和Python示例。 Java示例中使用的对象在.Net版本的API中不可用。无法翻译这些例子。

幸运的是,在C#/ VB中执行相同操作非常容易。只需使用普通的旧Net.Mail.MailMessage创建包含附件的消息,然后使用MimeKit(NuGet it)将消息转换为字符串并将字符串(在编码Base64之后)传递给Gmail API的message.send的“Raw”字段

答案 1 :(得分:1)

对于答案来说太晚了,但是如果有人需要的话,张贴它:)

需要MimeKit库:可以从NuGet安装。

enter image description here

代码:

public void SendHTMLmessage()
        {
            //Create Message
            MailMessage mail = new MailMessage();
            mail.Subject = "Subject!";
            mail.Body = "This is <b><i>body</i></b> of message";
            mail.From = new MailAddress("fromemailaddress@gmail.com");
            mail.IsBodyHtml = true;
            string attImg = "C:\\Documents\\Images\\Tulips.jpg OR Any Path to attachment";
            mail.Attachments.Add(new Attachment(attImg));
            mail.To.Add(new MailAddress("toemailaddress.com.au"));
            MimeKit.MimeMessage mimeMessage = MimeKit.MimeMessage.CreateFromMailMessage(mail);

            Message message = new Message();
            message.Raw = Base64UrlEncode(mimeMessage.ToString());
            //Gmail API credentials
            UserCredential credential;
            using (var stream =
                new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = System.Environment.GetFolderPath(
                    System.Environment.SpecialFolder.Personal);
                credPath = Path.Combine(credPath, ".credentials/gmail-dotnet-quickstart2.json");

                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scope,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
                Console.WriteLine("Credential file saved to: " + credPath);
            }

            // Create Gmail API service.
            var service = new GmailService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });
            //Send Email
            var result = service.Users.Messages.Send(message, "me/OR UserId/EmailAddress").Execute();
        }

范围可以是:

GmailSend或GmailModify

static string[] Scope = { GmailService.Scope.GmailSend };
static string[] Scope = { GmailService.Scope.GmailModify };

Base64UrlEncode功能:

private string Base64UrlEncode(string input)
        {
            var inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
            return Convert.ToBase64String(inputBytes)
              .Replace('+', '-')
              .Replace('/', '_')
              .Replace("=", "");
        }

答案 2 :(得分:0)

使用Gmail API发送附件没什么特别之处。无论哪种方式,Gmail API message.send()都会在message.raw字段(urlsafe base64 encoded)中收集完整的RFC822电子邮件。主要技巧是用您的语言构建这样一个RFC822电子邮件消息字符串。我想C#中有一些MIME消息库,主要问题是找到这些库。我不做C#,但是javax.internet.mail.MimeMessage在java和&#39; email&#39;模块适用于python。

这篇文章似乎很相关: How to send multi-part MIME messages in c#?