He intentado incrustar el código icalendar en un correo electrónico para enviarlo a través de indy con un tipo de texto/calendario pero simplemente se cuelga en la codificación del correo electrónico cuando agrego como archivo adjunto, solo llega como un archivo adjunto y no aparece como lo hacen otras solicitudes de calendario. ¿Alguien tiene un código de ejemplo de cómo hacer solicitudes de calendario a través de indy?Cómo enviar un correo electrónico con una solicitud de calendario (tipo de contenido: texto/calendario)
5
A
Respuesta
4
Aquí es una alternativa al ejemplo de RRUZ:
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.
4
@ David, el cliente de correo electrónico reconocerá como una petición Calendario de la unión, si se establece la propiedad de ContentType:='text/calendar'
, véase este enlace para el iCalendar format Specification
ver este código de ejemplo (probado 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.
Cuestiones relacionadas
- 1. cómo enviar correo electrónico HTML
- 2. Prellena un correo electrónico con contenido HTML
- 3. vb.net enviar correo electrónico
- 4. Enviar correo electrónico - Cocoa
- 5. ¿Cómo enviar un correo electrónico html con django con contenido dinámico en él?
- 6. ¿Cómo enviar archivos adjuntos de correo electrónico?
- 7. ¿Enviar correo electrónico de Elmah?
- 8. ¿Cómo enviar un correo electrónico con formato HTML?
- 9. Cómo enviar un correo electrónico con varias direcciones en C#
- 10. ¿Cómo enviar un correo electrónico con archivos adjuntos utilizando SmtpClient.SendAsync?
- 11. Lote Enviar correo electrónico con SwiftMailer
- 12. Cómo enviar un correo electrónico con archivos adjuntos en Ir
- 13. SwiftmailerBundle ¿cómo se puede enviar un correo electrónico con contenido html? Symfony 2
- 14. Enviar correo electrónico desde Cocoa
- 15. Enviar correo electrónico asincrónico con phpmailer
- 16. Enviar correo electrónico con attchement usando System.Net.Mail
- 17. enviar correo electrónico asp.net C#
- 18. iphone app enviar correo electrónico
- 19. Enviar correo electrónico con archivo adjunto mediante aplicación de correo electrónico del cliente
- 20. Enviar correo electrónico desde un desencadenador
- 21. ¿Cómo enviar un correo electrónico en formato richtext a Outlook?
- 22. Enviar un correo electrónico con texto rtf en delphi
- 23. enviar correo electrónico desde localhost
- 24. Enviar una tabla en el correo electrónico
- 25. Enviar correo electrónico con una plantilla utilizando php
- 26. Enviar correo electrónico de activación al usuario
- 27. C# Enviar correo electrónico masivo
- 28. Enviar notificación por correo electrónico de Jenkins
- 29. Enviar correo electrónico-Simulador de Iphone
- 30. Guión de shell para enviar correo electrónico
Gracias, me encontré RRUZ tipo de programa trabajado en Gmail, pero la perspectiva al recuperar el correo electrónico j ust termina. Más específico. El servicio envía automáticamente el correo electrónico desde el servidor usando Indy. Cada correo electrónico tiene una parte de texto/normal, la parte de texto/html y, opcionalmente, archivos adjuntos. Esto funciona bien Al tratar de incorporar el ical al final, similar al ejemplo con texto/calendario de contenido; método = solicitar como parte final el programa se congela después del mensaje de codificación para las primeras partes pero un problema en la parte del calendario. La parte del mensaje como si fuera un texto/plano con las secciones del ical y el contenido como se menciona. –
Entonces es probable que no llene correctamente el TIdMessage, por favor muestre su código actual. –
mi código a continuación, la parte añadida es la última después de los archivos adjuntos ect Procedimiento Emailer.BuildCalendar (Msg_In: TIdMessage); var s: TStrings; const TAB = # 9; begin try s: = TStringList.Create; s.Add ('BEGIN: VCALENDAR'); ... otras líneas agregadas aquí ..... s.Add ('END: VCALENDAR'); // Cree las partes del Calendario con TIdText.Create (Msg_In.MessageParts, s) do begin ContentType: = 'text/calendar; método = "SOLICITUD"; charset = "UTF-8" '; ParentPart: = 0; // IdText.CharSet final; finalmente s.free; fin; final; .... con agradecimiento –