首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >5.2.0 STOREDRV.Submission.Exception:InvalidRecipientsException

5.2.0 STOREDRV.Submission.Exception:InvalidRecipientsException
EN

Stack Overflow用户
提问于 2020-04-30 07:05:48
回答 2查看 2.1K关注 0票数 4

我试图使用outlook电子邮件id向多个收件人发送ics邀请邮件。但我发现了这个错误..。

事务失败。服务器响应是: 5.2.0 STOREDRV.Submission.Exception:InvalidRecipientsException;无法处理消息,原因是消息永久异常,消息无法发送,因为它不包含收件人。InvalidRecipientsException:无法发送消息,因为它不包含收件人。

这是我的代码:

代码语言:javascript
复制
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凭据,如上面的代码所示。

EN

回答 2

Stack Overflow用户

发布于 2020-09-04 09:02:26

我解决了这个问题。

这两行应该在VEVENT

代码语言:javascript
复制
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));

如下所示:

代码语言:javascript
复制
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");
票数 1
EN

Stack Overflow用户

发布于 2020-09-01 15:31:23

我认为原因是格式错误的ICS。

这很有误导性,但我认为InvalidRecipientsException指的是ICS的“接受者”--与会者,甚至组织者。我也犯了同样的错误,这就是我的问题所在。Outlook在尝试发送电子邮件时似乎严格验证ICS,而其他提供者(如Gmail和SendGrid)则不验证。

您可以尝试使用像下面这样的严格验证器验证ICS:http://ical-validator.herokuapp.com/validate/

这可能是因为您的代码没有观察ICS文件的最大行长:75个字符。你的参会队伍可能会超过这一点。

您可以尝试将CN属性删除到与会者上。这没必要。虽然您仍然应该检查75个字符行的长度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61517693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档