我正在使用正在使用的应用程序中的Gmail API。但是,我不确定如何将其Java或Python示例更改为C#。现有样本如何改变?在C#中为Gmail API创建消息
回答
看起来这是不是真的使用Gmail API的问题。你应该寻找的是“C#创建电子邮件”(可能增加“RFC 2822”,因为这是定义这些电子邮件格式的RFC)。一旦你有了这样一个有效的“电子邮件信息”(真正的,可以用于SMTP或IMAP等的整个电子邮件内容),那么使用它与Gmail API应该是相当简单的。
这是一个棘手的问题要解决,但我最终得到它。我使用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/
我试过使用你的代码,但是我得到错误错误CS0103:Context.GoogleOAuthInitializer上的当前上下文中不存在名称'Context'。你从哪里获得上下文? – Rossini
@Rossini对不起,这是对我自己代码的引用,它返回一个Google.Apis.Services.BaseClientService.Initializer,它设置为将OAuth2承载令牌添加到每个请求。您可能只能使用默认的GmailService()构造函数 - 取决于您的Gmail服务如何进行身份验证。我会更新我的代码,以便更清楚地说明问题。 – pettys
此代码适用于纯文本电子邮件。但不适用于HTML电子邮件+附件。 –
这是我能得到工作,使用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 Emails Bouncing
- 1. 如何创建Gmail API消息
- 2. Gmail API阅读消息
- 3. 将Gmail API消息转换为OpenPop Mime消息
- 4. 如何使用sendible api在消息框中创建消息?
- 5. 使用Python中的imaplib在Gmail中创建草稿消息
- 6. 如何在c中创建xml消息?
- 7. 如何在c#中创建SOAP消息?
- 8. 在'消息'中创建消息
- 9. C#创建MIME消息?
- 10. 在PyQt中为mac创建消息框
- 11. PHP为Gmail API创建MIME邮件
- 12. GMail API - messages()。list()只返回消息ID
- 13. Gmail Oauth API获取消息数
- 14. 使用gmail API发送现有消息
- 15. 在C#/ .NET中为PostMessage()创建WM_TOUCH消息
- 16. 在C#中为DirectoryNotFoundException创建错误消息而不是崩溃
- 17. 从消息描述中创建消息
- 18. 如何在Azure上为匿名HTTP API消息创建代理?
- 19. 获取Gmail消息
- 20. 创建消息框
- 21. 创建XML消息在VB6
- 22. 在C#创建自定义消息框,为游戏
- 23. 如何使用c为PayPal CreateInvoice api创建SOAP XML请求消息#
- 24. Office 365创建草稿答复消息休息API
- 25. 创建SOAP消息体
- 26. 创建弹出消息
- 27. 在javascript中创建提醒消息
- 28. 如何在wpf中创建消息框
- 29. Tkinter:cannnot在线程中创建消息框
- 30. 从Mule在MSMQ中创建消息
Java是如此接近C#,你一定试图转换它,并失败了一些如何?也许发布你试图转换的内容对于人们来说是个很好的开始,帮助你在错误的地方 – Prescott
嗯,我正在寻找'MimeMessage','Properties'等的等价物,而且快速谷歌搜索没有帮助接着就,随即。 – muttley91
Google API都是REST API。这些文档告诉你哪些参数需要进入REST API调用。 – Casey