我试图使用outlook电子邮件id向多个收件人发送ics邀请邮件。但我发现了这个错误..。
事务失败。服务器响应是: 5.2.0 STOREDRV.Submission.Exception:InvalidRecipientsException;无法处理消息,原因是消息永久异常,消息无法发送,因为它不包含收件人。InvalidRecipientsException:无法发送消息,因为它不包含收件人。
这是我的代码:
public ResponseModel SendInvite(ZoomDTO data)
{
try
{
string startTime1 = TimeZoneInfo.ConvertTimeToUtc(Convert.ToDateTime(DateTime.Now.ToString())).ToString("yyyyMMddTHHmmssZ");
string endTime1 = TimeZoneInfo.ConvertTimeToUtc(Convert.ToDateTime(DateTime.Now.AddDays(1).ToString())).ToString("yyyyMMddTHHmmssZ");
SmtpClient sc = SmtpSettings();
MailMessage msg = new MailMessage();
msg.From = new MailAddress("donotreply@companyname.com", "Screen Detailing");
if (data.TO_EMAIL.Contains(","))
{
string[] mailIds = data.TO_EMAIL.Split(',');
foreach (var item in mailIds)
{
msg.To.Add(new MailAddress(item));
}
}
else
{
msg.To.Add(new MailAddress(data.TO_EMAIL));
}
msg.Subject = data.SUBJECT;
msg.Body = "Zoom URL: " + data.ZOOM_URL + " Meeting ID: " + data.MEETING_ID + " Zoom Password: " + data.ZOOM_PWD; //emailbody
StringBuilder str = new StringBuilder();
str.AppendLine("BEGIN:VCALENDAR");
//PRODID: identifier for the product that created the Calendar object
str.AppendLine("PRODID:-//ABC Company//Outlook MIMEDIR//EN");
str.AppendLine("VERSION:2.0");
str.AppendLine("METHOD:REQUEST");
str.AppendLine("BEGIN:VEVENT");
str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", startTime1));//TimeZoneInfo.ConvertTimeToUtc("BeginTime").ToString("yyyyMMddTHHmmssZ")));
str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.Now));
str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", endTime1));//TimeZoneInfo.ConvertTimeToUtc("EndTime").ToString("yyyyMMddTHHmmssZ")));
str.AppendLine(string.Format("LOCATION: {0}", "Location"));
// UID should be unique.
str.AppendLine(string.Format("UID:{0}", Guid.NewGuid()));
str.AppendLine(string.Format("DESCRIPTION:{0}", msg.Body));
str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body));
str.AppendLine(string.Format("SUMMARY:{0}", msg.Subject));
str.AppendLine("STATUS:CONFIRMED");
str.AppendLine("BEGIN:VALARM");
str.AppendLine("TRIGGER:-PT15M");
str.AppendLine("ACTION:Accept");
str.AppendLine("DESCRIPTION:Reminder");
str.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:BUSY");
str.AppendLine("END:VALARM");
str.AppendLine("END:VEVENT");
str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address));
str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", msg.To[0].DisplayName, msg.To[0].Address));
str.AppendLine("END:VCALENDAR");
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar");
ct.Parameters.Add("method", "REQUEST");
ct.Parameters.Add("name", "meeting.ics");
AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), ct);
msg.AlternateViews.Add(avCal);
//Response.Write(str);
// sc.ServicePoint.MaxIdleTime = 2;
sc.Send(msg);
return new ResponseModel
{
ResultSet = "success",
StatusCode = 1,
StatusDescription = "Success",
ReasonPhrase = string.Empty
};
}
catch (Exception ex)
{
throw ex;
}
}
private static SmtpClient SmtpSettings()
{
SmtpClient sc = new SmtpClient();
sc.Host = "smtp.office365.com";
sc.Port = 587;
sc.UseDefaultCredentials = false;
sc.Credentials = new System.Net.NetworkCredential("donotreply@companyname.com", "password");
sc.EnableSsl = true;
return sc;
}同样的代码在gmail smtp设置和gmail id凭据中运行良好。此外,在没有ics邀请的情况下,相同的代码可以很好地处理office365、smtp设置和我公司的id凭据,如上面的代码所示。
发布于 2020-09-04 09:02:26
我解决了这个问题。
这两行应该在VEVENT中
str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address));
str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", msg.To[0].DisplayName, msg.To[0].Address));如下所示:
str.AppendLine("BEGIN:VEVENT");
str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address));
str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", msg.To[0].DisplayName, msg.To[0].Address));
str.AppendLine("END:VEVENT");发布于 2020-09-01 15:31:23
我认为原因是格式错误的ICS。
这很有误导性,但我认为InvalidRecipientsException指的是ICS的“接受者”--与会者,甚至组织者。我也犯了同样的错误,这就是我的问题所在。Outlook在尝试发送电子邮件时似乎严格验证ICS,而其他提供者(如Gmail和SendGrid)则不验证。
您可以尝试使用像下面这样的严格验证器验证ICS:http://ical-validator.herokuapp.com/validate/
这可能是因为您的代码没有观察ICS文件的最大行长:75个字符。你的参会队伍可能会超过这一点。
您可以尝试将CN属性删除到与会者上。这没必要。虽然您仍然应该检查75个字符行的长度。
https://stackoverflow.com/questions/61517693
复制相似问题