Afsendelse af e-mails med vedhæftede filer ved hjælp af Delphi & Indy

Nedenfor er instruktioner til oprettelse af en "e-mail-afsender", der inkluderer en mulighed for at sende e-mail-beskeder og vedhæftede filer direkte fra en Delphi-applikation. Før vi begynder, skal du overveje alternativet ...

Antag, at du har en applikation, der fungerer på nogle databasedata, blandt andre opgaver. Brugere skal eksportere data fra din ansøgning og send dataene via en e-mail (som en fejlrapport). Uden den tilgang, der er beskrevet nedenfor, skal du eksportere dataene til en ekstern fil og derefter bruge en e-mail-klient til at sende dem.

Sender e-mail fra Delphi

Der er mange måder, du kan sende en e-mail direkte fra Delphi, men den enkleste måde er at bruge ShellExecute API. Dette vil sende e-mailen ved hjælp af standard e-mail-klienten, der er installeret på computeren. Selvom denne tilgang er acceptabel, kan du ikke sende vedhæftede filer på denne måde.

En anden teknik bruger Microsoft Outlook og OLE til at sende e-mailen denne gang med vedhæftningsstøtte, men MS Outlook kræves derefter brugt.

instagram viewer

Endnu en mulighed er at bruge Delphis indbyggede support til Windows Simple Mail API. Dette fungerer kun, hvis brugeren har et MAPI-kompatibelt e-mail-program installeret.

Den teknik, vi diskuterer her, bruger Indy (Internet Direct) -komponenter - en stor internetkomponent-pakke, der består af populære internetprotokoller skrevet i Delphi og baseret på blokerende stikkontakter.

TIdSMTP (Indy) metoden

Det er lige så let at sende (eller hente) e-mail-beskeder med Indy-komponenter (som sendes med Delphi 6+) som at slippe en komponent eller to på en formular, indstille nogle egenskaber og "klikke på en knap."

For at sende en e-mail med vedhæftede filer fra Delphi ved hjælp af Indy, har vi brug for to komponenter. Først TIdSMTOP bruges til at oprette forbindelse og kommunikere (sende mail) med en SMTP-server. For det andet, TIdMessage håndterer lagring og kodning af meddelelserne.

Når meddelelsen er konstrueret (hvornår TIdMessage er "fyldt" med data), e-mailen leveres til en SMTP-server ved hjælp af TIdSMTP.

E-mail-afsender kildekode

Jeg har oprettet et simpelt mail-afsenderprojekt, som jeg forklarer nedenfor. Du kan downloade den fulde kildekode her.

Bemærk: Dette link er en direkte download til ZIP-filen til projektet. Du skal være i stand til at åbne den uden problemer, men hvis du ikke kan, kan du bruge den 7-Zip for at åbne arkivet, så du kan udpakke projektfilerne (som er gemt i en kaldet mappe Send mail).

Som du kan se fra designtid-skærmbilledet, så send en e-mail ved hjælp af TIdSMTP komponent, skal du mindst specificere SMTP-postserveren (vært). Selve meddelelsen har brug for de regelmæssige e-mail-dele, der er udfyldt, som f.eks Fra, Til, Emne, etc.

Her er koden, der håndterer afsendelse af en e-mail med en vedhæftet fil:

procedure TMailerForm.btnSendMailClick (Afsender: TObject); begynde StatusMemo. Klar; // opsætning af SMTP SMTP.Host: = ledHost. Tekst; SMTP.Port: = 25; // opsæt e-mail-besked MailMessage. Fra. Adresse: = ledFrom. Tekst; MailMessage. Modtagere. EMailAddresses: = ledTo. Tekst + ',' + ledCC.Text; MailMessage. Emne: = ledSubject. Tekst; MailMessage. Legeme. Tekst: = Krop. Tekst; hvis FileExists (ledAttachment. Tekst) derefter TIdAttachment. Opret (MailMessage. MessageParts, ledAttachment. Tekst); //Send mailprøveprøve SMTP.Connect (1000); SMTP.Send (MailMessage); undtagen E: Undtagelse gør. StatusMemo. Linjer. Indsæt (0, 'FEJL:' + E.Message); ende; endelighvis SMTP.Connected derefter SMTP.Disconnect; ende; ende; (* btnSendMail Click *)

Bemærk: Inde i kildekoden finder du to ekstra procedurer, der bruges til at oprette værdierne for Vært, Fra, og Til rediger bokse vedvarende ved hjælp af en INI-fil til opbevaring.

instagram story viewer