2010-04-18 2 views
5

indy를 통해 전자 메일에 icalendar 코드를 포함시키고 text/calendar 콘텐츠 형식으로 보내려고했지만 인코딩이 중단되었습니다 첨부 파일로 추가 할 때 전자 메일의 첨부 파일로 도착하고 다른 달력 요청으로 묻지 않습니다. 인디를 통해 캘린더 요청을하는 방법에 대한 예제 코드가 있습니까? 당신이 ContentType:='text/calendar'에 속성을 설정하면캘린더 요청 (콘텐츠 유형 : 텍스트/캘린더)이 포함 된 전자 메일을 보내는 방법

답변

4

이 RRUZ의 예에 대한 대안 : 이메일 J를 검색 할 때

program SendMailWithCalendarRequest; 
{$APPTYPE CONSOLE} 

uses 
    IdSMTP, 
    Classes, 
    DateUtils, 
    IdMessage, 
    SysUtils; 

procedure SendCalendarRequest; 
var 
    SMTP  : TIdSMTP; 
    MailMessage : TIdMessage; 
begin 
    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 := '[email protected]'; 
    MailMessage.Recipients.EMailAddresses := 'the Recipient'; 
    MailMessage.Subject := 'Send calendar'; 
    MailMessage.Body.Add('BEGIN:VCALENDAR'); 
    MailMessage.Body.Add('VERSION:1.0'); 
    MailMessage.Body.Add('BEGIN:VEVENT'); 
    MailMessage.Body.Add('ORGANIZER:MAILTO:'+SenderMail); 
    MailMessage.Body.Add('DTStart:'+FormatDateTime('YYYY-DD-DD',Now)); 
    MailMessage.Body.Add('DTEnd:'+FormatDateTime('YYYY-DD-DD', Tomorrow)); 
    MailMessage.Body.Add('Location;ENCODING=QUOTED-PRINTABLE: My home'); 
    MailMessage.Body.Add('UID:'+FormatDateTime('YYYY-DD-DD',Now)+FormatDateTime('YYYY-DD-DD', Tomorrow)); 
    MailMessage.Body.Add('SUMMARY:Appointment Reminder'); 
    MailMessage.Body.Add('DESCRIPTION:Test message'); 
    MailMessage.Body.Add('PRIORITY:5'); 
    MailMessage.Body.Add('END:VEVENT'); 
    MailMessage.Body.Add('END:VCALENDAR'); 
    MailMessage.ContentType := 'text/calendar'; 
    SMTP.Connect; 
    try 
     try 
     SMTP.Send(MailMessage) ; 
     Writeln('OK') 
     except on E:Exception do 
     Writeln(0, 'ERROR: ' + E.Message) ; 
     end; 
    finally 
     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. 
+0

감사합니다, 나는 RRUZ 프로그램의 Gmail에서 일의 종류,하지만 전망을 실행 ust가 종료됩니다. 자세한 내용. 서비스 자동은 Indy를 사용하여 서버로부터 전자 메일을 보냅니다. 각 전자 메일에는 text/plain 부분, text/html 부분 및 선택적으로 첨부 파일이 있습니다. 이것은 잘 작동합니다. 콘텐츠 텍스트/캘린더 예제와 비슷한 끝에 ical을 통합하려고 할 때; method = 요청은 프로그램의 첫 번째 부분에 대한 메시지를 인코딩 한 후 프로그램이 정지하지만 달력 부분에는 문제가 있습니다. 메시지는 언급 된대로 ical과 내용의 tstrings을 갖는 텍스트/일반 텍스트처럼 구성됩니다. –

+0

그러면 TIdMessage를 올바르게 채우지 못할 가능성이 있습니다. 실제 코드를 보여주십시오. –

+0

내 코드 아래에 첨부 된 부분이 마지막에 붙습니다. 프로 시저 Emailer.BuildCalendar (Msg_In : TIdMessage); var s : TStrings; const TAB = # 9; begin try s : = TStringList.Create; s.Add ('BEGIN : VCALENDAR'); ... 여기에 다른 행이 추가되었습니다 ..... s.Add ('END : VCALENDAR'); // 일정 부분을 만듭니다. TIdText.Create (Msg_In.MessageParts, s)를 사용하여 을 처리하십시오. begin ContentType : = 'text/calendar; method = "REQUEST"; charset = "UTF-8" '; 부모 항목 : = 0; // IdText.CharSet end; finally s.free; 종료; 끝; .... 감사합니다. –

4

@ 데이비드, 이메일 클라이언트가 일정 요청으로 첨부 파일을 인식,이 샘플 코드를 참조 iCalendar format Specification

이 링크를 참조

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. 
(델파이 2010 엉 테스트) 여기
관련 문제