Jump to content

[Ajuda] Enviar anexos num e-mail


CanonTG
 Share

Recommended Posts

Boas,

Como enviar anexos num e-mail?

este é o meu código


try
     idSMTP1 := TIdSMTP.create(nil);
     idmessage1 := TIdMessage.create(nil);

     // configura servidor SMTP
     idSMTP1.Host := 'smtp.gmail.com';
     idSMTP1.Username := 'caxtia1991@gmail.com';
     idSMTP1.Password := ' ';
     idSMTP1.ConnectTimeout := 20000;

     // configurações adicionais servidor SMTP com autenticação
     with idSMTP1 do
     begin
        IdSSL := nil;
        try
           port := 465;
           IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
           IdSMTP1.IOHandler := IdSSL;
           UseTLS := utUseImplicitTLS;
        except
           on E: Exception do
           begin
              IOHandler := TIdIOHandler.MakeDefaultIOHandler(nil);
              UseTLS := utNoTLSSupport;
           end;
        end;
        if Assigned(IdSSL) then
        begin
           IdSSL.SSLOptions.Method := sslvSSLv3;
           IdSSL.SSLOptions.Mode := sslmClient;
        end;
     end;
     idSMTP1.AuthType := IdSMTP.satDefault;

     // configurando mensagem
     idmessage1.Clear;
     idmessage1.CharSet:='iso-8859-1';
     idmessage1.Encoding := MeMIME;
     idmessage1.ContentType:='multipart/related';
     idmessage1.from.address := 'caxtia1991@gmail.com';  // e-mail do remetente

     // e-mail destinatario                                      |
     idmessage1.recipients.emailaddresses := LabelEmailCli.Caption;//'martapinheiro620@gmail.com';

     // Assunto (titulo E-mail)
     idmessage1.subject :=EditAssunto.Text ;//'Teste de SSL gmail';

     // Corpo da Mensagem (use aqui um HTML ou texto que deseja enviar
     // juntamente com a mensagem.
     textomsg := TIdText.Create(idmessage1.MessageParts);
     textomsg.Body.Text := MemoConteudo.Text;//'Prezado Cliente, este é um teste de email com SSL no gmail';

     //Anexos



     textomsg.ContentType := 'text/html';



     idSMTP1.Connect;
     idSMTP1.Authenticate;
     idSMTP1.send(idmessage1);
     idSMTP1.Disconnect;

     ShowMessage('E-mail Enviado!');
  finally
     idmessage1.Free;
     idSSL.Free;
     IdSMTP1.Free;
  end;

Edited by CanonTG
Link to comment
Share on other sites

Tens de criar uma variável do tipo TIdAttachmentFile.

Depois, antes do connect, tens de ligar essa variável à da mensagem, e inserir-lhe o ficheiro a enviar.

Ex:

var
  Anexo    : TIdAttachmentFile;
  FileName : String;
begin
    Filename := 'c:\xpto.jpg';  // Caminho e Nome do ficheiro a enviar
.
.
.
.
    Anexo := TIdAttachmentFile.Create(idMessage1.MessageParts, Filename);
    Anexo.ExtraHeaders.Values['content-id'] := '';
    Anexo.ContentType := 'image/jpeg';
    Anexo.FileIsTempFile := False;
    Anexo.ContentDisposition := 'inline';
    Anexo.DisplayName := 'xpto.jpg';
.
.
.
. 
  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Para enviar anexos em pdf , eu tentei com este código mas fica em txt e não se percebe nada


for i := 0 to ListBox1.Items.Count-1 do
	Filename := ListBox1.Items.Strings[i];

 Anexo := TIdAttachmentFile.Create(idmessage1.MessageParts, Filename);
 Anexo.ExtraHeaders.Values['content-id'] := '';
 Anexo.ContentType := 'pdf';
 Anexo.FileIsTempFile := False;
 Anexo.ContentDisposition := 'inline';
 Anexo.DisplayName := Filename+'.pdf';

Edited by CanonTG
Link to comment
Share on other sites

Para enviar anexos em pdf , eu tentei com este código mas fica em txt e não se percebe nada

Para PDF, usa só a primeira linha do código de Anexo (a que tem o TIdAttachmentFile.Create).

Nota no entanto que esse código só te vai enviar o último anexo da listbox1. Estás a corre-la toda, mas guardas sempre o resultado em cima da mesma variável.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Eu envio assim e envia quantos anexos estiverem na ListBox, o problema é que no e-mail o anexo está sem extensão



   for i := 0 to ListBox1.Items.Count-1 do
     TIdAttachmentFile.Create(idmessage1.MessageParts, ListBox1.Items.Strings[i]);

Link to comment
Share on other sites

Na listbox o nome do ficheiro tem extensão?

Se não tiver, acrescentas na hora do envio:

for i := 0 to ListBox1.Items.Count-1 do
     TIdAttachmentFile.Create(idmessage1.MessageParts, ListBox1.Items.Strings[i]+'.pdf');

O ideal no entanto era, antes de adicionares o anexo, confirmares se o ficheiro existe.

Nesse caso:

for i := 0 to ListBox1.Items.Count-1 do
     begin
        FileName:=ListBox1.Items.Strings[i]+'.pdf';
        if FileExists(Filename)
           then TIdAttachmentFile.Create(idmessage1.MessageParts, Filename);
     end;
Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Muito estranho, sem dúvida...

Experimenta:

for i := 0 to ListBox1.Items.Count-1 do
     begin
        FileName:=ListBox1.Items.Strings[i]+'.pdf';
        if FileExists(Filename)
           then with TIdAttachmentFile.Create(idmessage1.MessageParts, Filename) do 
                     DisplayName := Filename;
     end;

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Sim, claro... Se na listbox tem a extensão, não podes por ali. Retira o .pdf, mas o resto mantém (DisplayName = Filename).

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Eu tenho apenas este código, e continuo com o problema


for i := 0 to ListBox1.Items.Count-1 do
     begin
        FileName:=ListBox1.Items.Strings[i];
        if FileExists(Filename)
           then TIdAttachmentFile.Create(idmessage1.MessageParts, Filename);
     end;
Link to comment
Share on other sites

Sim, claro... Se na listbox tem a extensão, não podes por ali. Retira o .pdf, mas o resto mantém (DisplayName = Filename).

Experimenta, como eu disse em cima, meter o DisplayName. Usa o With para não teres de criar uma variável.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.