2015-09-25 23 views
5

Tôi muốn gửi Thư bằng API Gmail của Google. Tôi đã xác thực thành công và đang cố gắng sử dụng GmailService để gửi thư.Cách tạo Thư Gmail API

Tôi muốn sử dụng này:

myService.Users.Messages.Send(myMessage, "me").Execute(); 

nơi MyService là một Google.Apis.Gmail.v1.GmailService và MyMessage là một Google.Apis.Gmail.v1.Data.Message.

myService là tốt, tôi đã thực hiện điệu nhảy OAuth. Tôi có thể nhận tin nhắn từ Hộp thư đến của tôi và tất cả điều đó. Nhưng tôi không biết cách xây dựng myMessage. Tôi có tiêu chuẩn .NET MailMessage, với Chủ đề, Nội dung, Tới, Từ người, có thể đọc được,

Nhưng lớp Google Message có trường Payload hoặc Raw. Cách dễ nhất để chuyển đổi toàn bộ số MailMessage thành chuỗi mà tôi có thể đặt thành thuộc tính Payload hoặc Raw là gì? Hay đây không phải là điều tôi nên làm?

The documentation for the Message class.

Trả lời

7

Tôi đã tìm thấy giải pháp. Kỳ lạ, .NET dường như không hỗ trợ điều này một cách tự nhiên/dễ dàng. Tuy nhiên, có một gói nuget đẹp, được gọi là AE.Net.Mail, có thể viết một đối tượng tin nhắn dễ dàng tạo ra một luồng.

Here's the sample code that pointed me in that direction.

Sao chép và dán mã như trang web có vẻ là xuống, và bộ nhớ cache của Google có thể không kéo dài mãi mãi:

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("[email protected]")); 
    msg.ReplyTo.Add(msg.From); // Bounces without this!! 
    var msgStr = new StringWriter(); 
    msg.Save(msgStr); 

    var gmail = new GmailService(Context.GoogleOAuthInitializer); 
    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("=", ""); 
    } 
} 
+1

Đối với bất kỳ ai nhìn vào điều này trong tương lai, hãy đảm bảo bạn đang sử dụng Gói Nuget 'AE.Net.Mail' (https://www.nuget.org/packages/AE.Net.Mail/) và không phải 'System.Net.Mail' (https://msdn.microsoft.com/en-us/library/system.net.mail(v=vs.110).aspx). Chúng rất giống nhau, nhưng hoạt động hơi khác (ví dụ: 'System.Net.Mail.MailMessage' không có phương thức' Save') – derekantrican

0

Dưới đây là một phiên bản thay thế sử dụng sử dụng 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("=", ""); 
} 

Lưu ý: Nếu bạn đang nhận được một vấn đề nảy email, nó có thể do không đặt trường ReplyToList. Xem: GMail API Emails Bouncing

Các vấn đề liên quan