- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将 iCal 格式的日历邀请添加到通过 MailGun API 发送的电子邮件中。这是我到目前为止所拥有的:
var request = new RestRequest();
request.AddParameter("domain", this.domain, ParameterType.UrlSegment);
request.Resource = "{domain}/messages";
request.AddParameter("from", contactDetails.SenderAddress);
request.AddParameter("to", contactDetails.RecipientAddress);
request.AddParameter("subject", message.Subject);
request.AddParameter("text", message.TextBody);
request.AddParameter("html", message.HtmlBody);
if (!string.IsNullOrWhiteSpace(message.IcalAttachment))
{
request.AddFileBytes("attachment",
Encoding.UTF8.GetBytes(message.IcalAttachment),
"invite.ics",
"text/calendar");
}
request.Method = Method.POST;
return request;
这导致日历作为附件包含在电子邮件中,不是电子邮件的替代 View 。附件在 gmail 中工作正常,但在 Outlook 中它显示为附件文件,您必须首先单击它,然后同意将日历添加到 Outlook 日历。是否有另一种使用 REST API 的方法,以便正确发送日历邀请,作为替代电子邮件 View ?
需要说明的是,这就是我使用 .Net SmtpClient
发送日历邀请的方式:
var contentType = new ContentType("text/calendar");
if (contentType.Parameters != null)
{
contentType.Parameters.Add("method", "REQUEST");
contentType.CharSet = "UTF-8";
}
// this is the same way you add a html view to the message
request.AlternateViews.Add(
AlternateView.CreateAlternateViewFromString(
message.IcalAttachment,
contentType));
最佳答案
特别感谢 Mailgun 的支持,为我指明了正确的方向。相关部分或他们的回应是:
You can use the /message.mime endpoint to construct the MIME for the calendar invite: https://documentation.mailgun.com/api-sending.html#sending
创建 MIME 消息并不像简单地使用/message 端点那么简单,但是有几个 .net 库可用于执行此操作。我用了MimeKit在这个例子中。
var request = new RestRequest();
request.AddParameter("domain", this.domain, ParameterType.UrlSegment);
request.Resource = "{domain}/messages.mime";
request.AddParameter("to", contactDetails.RecipientAddress);
request.AddFile(
"message",
Encoding.UTF8.GetBytes(BuildMimeContent(message)),
"message.mime");
request.Method = Method.POST;
return request;
我要创建的 MIME 内容将包含一个多部分/混合正文,它又将包含一个多部分/替代项以及每个附件。日历邀请实际上会附加两次,作为替代 View 和附件。这是为了帮助不同电子邮件客户端之间的兼容性。
BuildMimeContent(message)
的实现如下所示:
// create the alternative views
var textBody = new TextPart("plain") { Text = message.TextBody };
var htmlBody = new TextPart("html") { Text = message.HtmlBody };
// add views to the multipart/alternative
var alternative = new Multipart("alternative");
alternative.Add(textBody);
alternative.Add(htmlBody);
if (!string.IsNullOrWhiteSpace(message.CalendarInvite))
{
// also add the calendar as an alternative view
// encoded as base64, but 7bit will also work
var calendarBody = new TextPart("calendar")
{
Text = message.CalendarInvite,
ContentTransferEncoding = ContentEncoding.Base64
};
// most clients wont recognise the alternative view without the
// method=REQUEST header
calendarBody.ContentType.Parameters.Add("method", "REQUEST");
alternative.Add(calendarBody);
}
// create the multipart/mixed that will contain the multipart/alternative
// and all attachments
var multiPart = new Multipart("mixed") { alternative };
if (!string.IsNullOrWhiteSpace(message.CalendarInvite))
{
// add the calendar as an attachment
var calAttachment = new MimePart("application", "ics")
{
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64,
FileName = "invite.ics",
ContentObject = new ContentObject(GenerateStreamFromString(message.CalendarInvite))
};
multiPart.Add(calAttachment);
}
// TODO: Add any other attachements to 'multipart' here.
// build final mime message
var mimeMessage = new MimeMessage();
mimeMessage.From.Add(GetMimeAddress(message.MessageInfo.SenderName, message.MessageInfo.SenderAddress));
mimeMessage.To.Add(GetMimeAddress(message.MessageInfo.RecipientName, message.MessageInfo.RecipientAddress));
mimeMessage.Subject = message.Subject;
mimeMessage.Body = multiPart;
// parse and return mime message
return mimeMessage.ToString();
Office365 在验证日历邀请时非常挑剔。为避免收到如下所示的消息,您需要确保 vCal 的 organizer
电子邮件地址与电子邮件的 from
地址相匹配。如果您使用的是 mailgun 的沙箱测试环境,这是不可能的。
关于c# - 如何使用 Mailgun Rest API (C#) 发送 iCal 邀请,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38840101/
我尝试在 Django 中向所有订阅者发送新闻通讯邮件,但我无法决定在 Django 中执行此操作的最佳方法是什么。 首先,我列出了 5 个电子邮件地址并按计划发送(例如延迟 5 分钟)但是,因为我将
我有 Firebase 邀请使用电子邮件和短信就好了。然而,当涉及到通过 Facebook 或 twitter 共享时,我一无所知。通过 Firebase 与 Facebook 邀请共享数据的选项有哪
我们目前在一个 React Native 项目上使用 Firestack,这很棒,但是我们还需要通过 Firebase 的“邀请”功能提供的功能。 有人知道 Firebase Invites、iOS
我已受邀加入 GitHub 存储库。我在团队领导的计算机上看到我肯定已被邀请。但是我没有收到电子邮件,登录 GitHub 时也看不到任何通知。如何找到我的邀请并加入存储库? 最佳答案 如果您被邀请加入
我可以邀请用户加入租户。用户确认邀请并被分配订阅中的角色后,他/她可以查看该订阅以及其他租户的订阅。 我可以使用 az account list 列出来自所有不同租户的用户订阅 是否可以对 Azure
我可以邀请用户加入租户。用户确认邀请并被分配订阅中的角色后,他/她可以查看该订阅以及其他租户的订阅。 我可以使用 az account list 列出来自所有不同租户的用户订阅 是否可以对 Azure
我可以问一下在用户邀请他们的 friend 后如何重定向页面吗? 我有这样的代码:(在 javascript 中) function inviteFriends(){ if(isBusy)
我在我的一个 Facebook 应用程序上实现了一个 FB 邀请你的 friend 按钮。 - 邀请效果很好 - 被邀请的用户收到正确的消息,但当他点击它时 - 它只会导致无处可去(空白页面)。 我如
我正在开发一个 Android 应用程序,我必须在其中使用 Rest API 邀请 Facebook 好友参加 Activity 。 下面是我准备参数包的代码 Bundle eventInvit
我正在尝试将邀请 friend 功能集成到我的应用程序中。我成功地实现了 Facebook SDK 和 Facebook 登录,但是当我尝试使用他们文档中的代码时: String appLinkUrl
我正在编写一个娱乐应用程序(一个用 Android 编写的 RESTful 应用程序)。 我想向 Facebook 好友展示并邀请他们加入我的应用。现在我成功加载了FB friend 。接下来我要做什
我正在尝试使用 Facebook API 来启用邀请 friend 使用我的应用程序我使用了 Facebook 开发者文档。问题是,当用户邀请他的 friend 时,notifications 会出现
如何测试动态链接或邀请?是否有可以运行的 adb 命令,以及如何生成该链接。 我试过(有不同的变体) adb shell am start -W -a android.intent.action.VI
我们如何使用我的应用程序邀请我们的 Twitter 好友/关注者参加任何应用程序/事件。为了在 Facebook 上做同样的事情,我将一些消息发布到我的 friend 墙上。有什么方法可以使用 MGT
twitter 是否有类似于 facebook 的应用程序邀请弹出窗口? 在 facebook 你可以这样写: FB.init({ appId : 'xxx', status :
我想知道是否可以使用 FB.ui 邀请 friend 访问我的 Web 应用程序的自定义页面,但不能访问其索引。 Apprequests 方法似乎没有任何可自定义 uri 的参数 FB.ui({m
我一直在网上寻找一种方法来做到这一点,但没有这样的运气。我的目标是将 session 议程模板保存到电子邮件签名中,该签名将插入到我创建的每个 session 邀请中。 正在寻找有关如何执行此操作的一
我目前正在使用以下代码向用户的 Facebook 好友发送邀请。然而,一旦该功能运行,就会弹出一个确认对话框,我必须确认我想将请求发送给我的 friend 。我想跳过这个额外的步骤。有没有办法避免这个
我目前正在使用以下代码向用户的 Facebook 好友发送邀请。然而,一旦该功能运行,就会弹出一个确认对话框,我必须确认我想将请求发送给我的 friend 。我想跳过这个额外的步骤。有没有办法避免这个
我正在编写一个 Facebook iframe/canvas 应用程序,并希望让用户能够邀请 friend 安装此应用程序。目前我正在使用 Facebook 的 PHP-SDK 来登录用户以及与 Fa
我是一名优秀的程序员,十分优秀!