一千萬個為什麽

搜索

如何發送包含日歷請求的電子郵件(內容類型:文本/日歷)


我試圖將icalendar代碼嵌入到電子郵件中,通過indy發送內容類型的文本/日歷,但它只是掛在電子郵件的編碼上,當我作為附件添加它只是作為附件到達而不提示為其他日歷請求。有沒有人通過indy得到如何做日歷請求的示例代碼?

最佳答案

@David, the email client will recognize as a calendar request the attachment if you set the property to ContentType:='text/calendar', see this link for the iCalendar format Specification

請參閱此示例代碼(已測試en Delphi 2010)

program SendMailWithCalendarRequest;
{$APPTYPE CONSOLE}


uses
  IdSMTP,
  Classes,
  DateUtils,
  IdAttachmentFile,
  IdMessage,
  SysUtils;

 procedure SendCalendarRequest;
 var
  SMTP        : TIdSMTP;
  MailMessage : TIdMessage;
  Calendar    : TStrings;
  CalendarFile: String;
  Attachment  : TIdAttachmentFile;
  SenderMail  : String;
 begin
    SenderMail:='[email protected]';
    CalendarFile:=ExtractFilePath(ParamStr(0))+'\appmnt.vcs';
    Calendar:=TStringList.Create;
    try
        Calendar.Add('BEGIN:VCALENDAR');
        Calendar.Add('VERSION:1.0');
        Calendar.Add('BEGIN:VEVENT');
        Calendar.Add('ORGANIZER:MAILTO:'+SenderMail);
        Calendar.Add('DTStart:'+FormatDateTime('YYYY-DD-DD',Now));
        Calendar.Add('DTEnd:'+FormatDateTime('YYYY-DD-DD',  Tomorrow));
        Calendar.Add('Location;ENCODING=QUOTED-PRINTABLE: My home');
        Calendar.Add('UID:'+FormatDateTime('YYYY-DD-DD',Now)+FormatDateTime('YYYY-DD-DD',Tomorrow));
        Calendar.Add('SUMMARY:Appointment Reminder');
        Calendar.Add('DESCRIPTION:Test message');
        Calendar.Add('PRIORITY:5');
        Calendar.Add('END:VEVENT');
        Calendar.Add('END:VCALENDAR');
        Calendar.SaveToFile(CalendarFile);
    finally
    Calendar.Free;
    end;

   SMTP:= TIdSMTP.Create(nil);
   MailMessage := TIdMessage.Create(nil);
   try
     SMTP.Host := 'smtp.mailserver.com';
     SMTP.Port := 25;
     SMTP.Username:='the account';
     SMTP.Password:='the password';
     SMTP.AuthType:=satDefault;
     MailMessage.From.Address := SenderMail;
     MailMessage.Recipients.EMailAddresses := 'the Recipient';
     MailMessage.Subject   := 'Send calendar';
     MailMessage.Body.Text := '';
     Attachment:=TIdAttachmentFile.Create(MailMessage.MessageParts, CalendarFile) ;
     Attachment.ContentType:='text/calendar';//set the content type to text/calendar
     try
       try
         SMTP.Connect;
         SMTP.Send(MailMessage) ;
         Writeln('OK')
       except on E:Exception do
         Writeln(0, 'ERROR: ' + E.Message) ;
       end;
     finally
       if SMTP.Connected then SMTP.Disconnect;
     end;
   finally
    SMTP.Free;
    MailMessage.Free;
   end;

 end;

begin
  try
    SendCalendarRequest;
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

轉載註明原文: 如何發送包含日歷請求的電子郵件(內容類型:文本/日歷)

猜你喜歡