Гледам да използвам API на Gmail в приложение, върху което работя. Не съм сигурен обаче как да променя техните примери за Java или Python на C#. Как точно се променя съществуващата извадка?
Създаване на съобщение за API на Gmail в C#
Отговори (3)
Ето какво успях да накарам да работи, използвайки 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("=", "");
}
Забележка: Ако получавате проблем с отхвърляне на имейл, това вероятно се дължи на това, че не сте задали полето ReplyToList. Вижте: Отхвърляне на имейли от API на GMail
Актуализация: Както е отбелязано в коментарите по-долу, има по-добър вариант от използването на mimeMessage.ToString()
. Вижте: Изпращане на имейл с Gmail API, кодиране на гръцки знаци в тяло
mimeMessage.ToString()
. Според забележки в namespace MimeKit
: In general, the string returned from this method SHOULD NOT be used for serializing the message to disk. It is recommended that you use MimeKit.MimeMessage.WriteTo(System.IO.Stream,System.Threading.CancellationToken) instead.
- person Doan Van Thang; 01.02.2021
Това беше труден проблем за решаване, но в крайна сметка го получих. Използвах пакета 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("[email protected]"));
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/
AE.Net.Mail
Nuget (nuget.org/packages/AE.Net.Mail), а не System.Net.Mail
(msdn.microsoft.com/en-us/library/system.net.mail(v=vs.110).aspx). Те са много подобни, но работят малко по-различно (напр. System.Net.Mail.MailMessage
няма метода Save
)
- person derekantrican; 09.06.2017
Изглежда, че това всъщност не е проблем с API на Gmail. Това, което трябва да търсите, е "c# create email" (потенциално добавяне на "RFC 2822", тъй като това е RFC, който определя формата за тези имейли). След като имате такова валидно „имейл съобщение“ (истинското, цялото имейл съдържание, което можете да използвате с SMTP или IMAP и т.н.), тогава използването му с API на Gmail би трябвало да е доста тривиално.
MimeMessage
,Properties
и т.н. и бързото търсене в Гугъл не помогна с това. - person muttley91   schedule 14.07.2014