1

C#アプリで会議出席依頼を送りたいので、dday.icalライブラリを利用しました。ical ライブラリを使用して .ics ファイルを作成しますが、既に作成した会議を更新したい インターネットで検索したところ、uid でカレンダーを更新できることがわかりましたが、同じ uid で新しい cal を作成して実行すると、既存の .ics ファイルが置き換えられます新しいファイルでは、既存のファイルとマージされませんでした

以下は私のコードです

private iCalendar CreateOneTimeCalendarEvent(string title,Dictionary<string,string> attendees, string body, DateTime startDate, double duration, string location, string organizer,
                                     string eventId, bool allDayEvent)
{
   var iCal = new iCalendar
    {
        Method = "PUBLISH", //PUBLISH
        Version = "2.0"
    };

    //Creating event evt    
    var evt = iCal.Create<Event>();
    //Title to event
    evt.Summary = title;

    //Start time to event
    evt.Start = new iCalDateTime(startDate.Year,
                                 startDate.Month, startDate.Day, startDate.Hour,
                                 startDate.Minute, startDate.Second);


    // Description to event
    evt.Description = body;

    // Location to event
    evt.Location = location;

    //Check for All day event
    evt.IsAllDay = allDayEvent;

    //End time for event
    if (!allDayEvent)
    {
        // Duration to event
        evt.Duration = TimeSpan.FromHours(duration);

    }

    //Event unique identifier id
    evt.UID = new Guid().ToString();

    //Orgnizer to event
    if (!String.IsNullOrEmpty(organizer))
    {
        evt.Organizer = new Organizer(organizer);
    }
    else
    {
        throw new Exception("Organizer provided was null");
    }
    var attendes = new List<IAttendee>();

    foreach ( var atten in attendees)
    {

        IAttendee attendee1 = new DDay.iCal.Attendee("MAILTO:"+atten.Key)
        {
            Role = atten.Value
        };
        attendes.Add(attendee1);

    }

    //Adding attendees into event

    evt.Attendees = attendes;


    if (!String.IsNullOrEmpty(eventId))
    {
        evt.UID = eventId;
    }

    //Creating Alarm for event
    var alarm = new Alarm
    {
        Duration = new TimeSpan(0, 15, 0),
        Trigger = new Trigger(new TimeSpan(0, 15, 0)),
        Action = AlarmAction.Display,
        Description = "Reminder"
    };


    evt.Alarms.Add(alarm);

    // Save into calendar file.
    var serializer = new iCalendarSerializer(iCal);

    //   serializer.SerializeToString(iCal);

    serializer.Serialize(iCal, "OneTimeCalendarEvent.ics");

    return iCal;
}

私の2番目の問題は、添付されたicsファイルでsmtpを使用したときに、ファイルをメールに添付しただけで、カレンダー要求イベントのように機能しないことです。以下は私のコードです:

static void Main(string[] args)
{
    Dictionary<string,string> attendees =new Dictionary<string,string>();
    attendees.Add("abc11@gmail.com", "REQ-PARTICIPANT");
    attendees.Add("abc21@gmail.com", "OPT-PARTICIPANT");

    attendees.Add("abc32@gmail.com", "OPT-PARTICIPANT");
    attendees.Add("abc43@gmail.com", "REQ-PARTICIPANT");
    attendees.Add("abc54@gmail.com", "OPT-PARTICIPANT");

    Program obj = new Program();
    iCalendar iCal= obj.CreateOneTimeCalendarEvent("Gnd Party", attendees,
        "Every budy shawa shawa", 
        DateTime.Now, 30.0, "Pune", 
        "rajendra.b", 
        Guid.NewGuid().ToString(),

        false);

    MailMessage message =obj.initMailMessage();

    //Add the attachment, specify it is a calendar file.
    System.Net.Mail.Attachment attachment =
    System.Net.Mail.Attachment.CreateAttachmentFromString(
    iCal.ToString(), new ContentType("text/calendar"));
    attachment.TransferEncoding = TransferEncoding.Base64;
    attachment.Name = "EventDetails.ics"; //not visible in outlook
    message.Attachments.Add(attachment);
    sendMailMessage(message);
}

メールの送信方法:

private static void sendMailMessage(MailMessage mailMessage)
{
    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

    SmtpServer.Port = 587;
    SmtpServer.Credentials = new System.Net.NetworkCredential("abc@gmail.com", "@12345");
    SmtpServer.EnableSsl = true;

    SmtpServer.Send(mailMessage);
    Console.WriteLine("mail send");
    Console.ReadLine();
}
4

0 に答える 0