E-Mail versenden mit Anhang

Alle Fragen zur Netzwerkkommunikation
Antworten
Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

E-Mail versenden mit Anhang

Beitrag von Epcop »

Hallo,

ich möchte eine E-Mail mit Anhang verschicken. Gibt es da eine einfache Möglichkeit dazu (ohne einen halben client erstellen zu müssen)?

Ich habe schon versucht das ganze mit Synapse zu bewerkstelligen, mit smtp von web.de. Aber alle meine versuche sind gescheitert.
Selbst einfache Demo Beispiele von Synapse werden nicht versendet. Worauf muss man den achten?1

LG
Epcop

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: E-Mail versenden mit Anhang

Beitrag von af0815 »

Die Aussage, alle Versuche sind gescheitert, ist zu sehr allgemein.

Am besten mal genau umschreiben welches Demo genau es war und was die Antworten vom SMTP-Server waren. SMTP kann man zur not auch mal mit einem Terminal händisch emulieren. Ich gehe davon aus, das es schon mal an der Authentifizierung gescheitert ist. Genauer Diagnostizieren kann es nur wenn man weis, was du gesendet hast und was von der Gegenstelle zurückgesendet wurde.

War es SynapseMail von http://synapse.ararat.cz/files/contrib/ ?! oder ein anderes Beispiel ?! Wenn SynapseMail, welches Beispiel aus dem Demoordner genau ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: E-Mail versenden mit Anhang

Beitrag von Epcop »

Windows 7
Lazarus 2.0.6
synapse 40
Smtp Web.de

E-Mails Versenden mit Thunderbird funktioniert - SMTP ist bei web.de also eingeschaltet.


Zum Beispiel dieser code funktioniert nicht:
A) https://stackoverflow.com/questions/676 ... t-agnostic oder auch dieser nicht
B) http://www.lazaruspascal.it/index.php?page=8;print
(Daten für Smtp https://hilfe.web.de/pop-imap/pop3/serverdaten.html )


Zum Testen soll einfach eine E-mail an mich selbst geschickt werden mit einer test-PDF Datei.

In A und B

Code: Alles auswählen

 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, SMTPSend,
  MIMEPart, MIMEMess,ssl_openssl,MyLibMail ;


B) sieht bei mir so aus:

Code: Alles auswählen

 
procedure TForm1.Button2Click(Sender: TObject);
var
   app: MyMailObject;
   elenco: TStringList;
   Errore: string;
begin
     app:=MyMailObject.Create;
     {setto i parametri}
     app.SetMyUser('max.mustermann@web.de');
     app.SetMyNome('max.mustermann');
     app.SetMyFrom('xxx@lazaruspascal.it');
     app.SetMyPassword('***');
     app.SetMyPorta('587'); //set to gmail
     app.SetMySMTPHost('smtp.web.de'); //set to gmail
     app.SetMyOggetto('MyObject');
     app.SetSSLTLS(TRUE);
     app.AddDestinatario('max.mustermann@web.de');
 
     app.AddMyAllegatoList('d:\lschen.pdf');
     //app.AddMyAllegatoList('c:\2.txt');
 
     app.AddRowCorpoMail('PIPPO');
     app.AddRowCorpoMail('PLUTO2');
 
     { invio la mail }
     app.MySendMail(Errore);
     if Length(TRim(Errore))>0 then
        ShowMessage(Errore);
 
     { libero la memoria }
     app.Destroy();
 
     ShowMessage('FINISH');
end;
 


Meldung: SMTP ERROR Login:???-Other undefined Status
SMTP ERROR: Logout:???-Other undefined Status





A) Sieht bei mir so aus:

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var
  MIMEText: TStrings;
  MIMEPart: TMimePart;
  MIMEMessage: TMimeMess;
begin
  MIMEText := TStringList.Create;
  MIMEText.Add('Hello,');
  MIMEText.Add('here is the text of your e-mail message,');
  MIMEText.Add('if you want the HTML format, use AddPartHTML');
  MIMEText.Add('or e.g. AddPartHTMLFromFile if you have your');
  MIMEText.Add('HTML message content in a file.');
 
  MIMEMessage := TMimeMess.Create;
 
  with MIMEMessage do
  try
    Header.Date := Now;
    Header.From := 'sender@from.com';
    Header.ToList.Clear;
    Header.ToList.Add('max.mustermann@web.de');
    Header.CcList.Clear;
    Header.Subject := 'E-mail subject';
    Header.XMailer := 'MailCient';
 
 
    MIMEPart := AddPartMultipart('mixed', nil);
 
    AddPartText(MIMEText, MIMEPart);
    AddPartBinaryFromFile('d:\lschen.pdf', MIMEPart);
 
    EncodeMessage;
 
    if SendToRaw(Header.From,               // e-mail sender
                 Header.ToList.CommaText,   // comma delimited recipient list
                 'smtp.web.de',         // SMTP server
                 Lines,                     // MIME message data
                 'max.mustermann',                   // server authentication
                 'kennwort')                // server authentication
    then
      ShowMessage('E-mail has been successfuly sent :)')
    else
      ShowMessage('E-mail sending failed :(');
  finally
    Free;
    MIMEText.Free;
  end;
 
end;   



Meldung: E-mail sending failed.


In beiden Beispielen könnte das vielleicht auch mit Support TLS zusammenhängen (von web.de gewünscht). Und wenn ich es richtig gelesen habe, benötige ich zusätzliche DLL.
Hier http://gnuwin32.sourceforge.net/packages/openssl.htm habe ich dann das setup gedownloadet und installiert. Brachte auch keine Änderung. Bzw. ich bin mir nicht sicher wie ich damit arbeiten muss oder ob ich noch etwas am Code verändern muss, oder einbinden usw.

Ich habe nicht wirklich Ahnung, was ich tun muss.

(Benutzer: max.mustermann und kennwort natürlich angepasst...)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: E-Mail versenden mit Anhang

Beitrag von af0815 »

Es wird schon richtig sein, das es beim SSL/TLS krankt.

Lass den Teil mit dem Anhang einmal komplett weg und schau nur ob du die Mail grundlegend versenden kannst.

Ev. eine Info zu dem Thema TLS Problem hier https://github.com/matrix-org/synapse/issues/6211 oder https://www.lazarusforum.de/viewtopic.php?f=55&t=12041. Habe es aber nicht mehr weiterverfolgt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: E-Mail versenden mit Anhang

Beitrag von Michl »

Habs mal mit meiner App verglichen, mit der ich regelmäßig Mails mit Anhang versende. Weiß nicht, ob du das nur als Platzhalter so geschrieben hast, aber hier muss deine Mailadresse rein:
Epcop hat geschrieben:A) Sieht bei mir so aus:

Code: Alles auswählen

 
...
        if SendToRaw(Header.From,               // e-mail sender
                     Header.ToList.CommaText,   // comma delimited recipient list
                     'smtp.web.de',         // SMTP server
                     Lines,                     // MIME message data
                     'max.mustermann',                   // server authentication   <---------------- Deine Mailadresse
                     'kennwort')                // server authentication
...

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: E-Mail versenden mit Anhang

Beitrag von Epcop »

Anhang habe ich weggelassen bei den Beispielen.
Auch das von Michl habe ich ausprobiert, geht noch nicht.

Ich versuche jetzt mal einen Mailanbieter zu finden, der dieses SSL, TLS nicht zwingend will. Damit ich mal überhaupt einen Einstieg finde. Web.de hat mich wahrscheinlich durch die vielen Versuche schon auf eine Sperrliste gesetzt ;-)
Vor ein paar Jahren, hatte ich ähnliches mal in PHP umgesetzt. Da kam mir das nicht so schwierig vor.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: E-Mail versenden mit Anhang

Beitrag von Michl »

Ich habe eben mal eine Wegwerfmailadresse unter web.de erstellt. Dann dort unter Einstellungen "POP3 und IMAP Zugriff erlauben" aktiviert. Da der Ausgang TLS/SSL benötigt, habe ich in der Unit smtpsend folgende Zeile unkommentiert:

Code: Alles auswählen

function SendToRaw(const MailFrom, MailTo, SMTPHost: string;
  const MailData: TStrings; const Username, Password: string): Boolean;
var
  SMTP: TSMTPSend;
  s, t: string;
begin
  Result := False;
  SMTP := TSMTPSend.Create;
  try
// if you need SOCKS5 support, uncomment next lines:
    // SMTP.Sock.SocksIP := '127.0.0.1';
    // SMTP.Sock.SocksPort := '1080';
// if you need support for upgrade session to TSL/SSL, uncomment next lines:
    SMTP.AutoTLS := True//<----------------------------- diese Zeile unkommentiert
Und schon geht es:

Code: Alles auswählen

uses ..., mimepart, mimemess, smtpsend, ssl_openssl;   
...
procedure TForm1.Button1Click(Sender: TObject);
var
  MIMEText    : TStrings;
  MIMEPart    : TMimePart;
  MIMEMessage : TMimeMess;
begin
  MIMEText := TStringList.Create;
  MIMEText.Add('Hi,');
  MIMEText.Add('here a cheetah.');
 
  MIMEMessage := TMimeMess.Create;
 
  with MIMEMessage do
  try
    Header.Date := Now;
    Header.From := 'TestLaz@web.de';
    Header.ToList.Clear;
    Header.ToList.Add('TestLaz@web.de');
    Header.CcList.Clear;
    Header.Subject := 'Cheetah Picture';
    Header.XMailer := 'Max Mustermann';
 
    MIMEPart := AddPartMultipart('mixed', nil);
 
    AddPartText(MIMEText, MIMEPart);
    AddPartBinaryFromFile(GetCurrentDir + PathDelim + 'cheetah.jpg', MIMEPart);
 
    EncodeMessage;
 
    if SendToRaw(Header.From,
                 Header.ToList.CommaText,
                 'smtp.web.de:587',
                 Lines,
                 'TestLaz@web.de',
                 '***Password***')
    then
      ShowMessage('E-mail gesendet.')
    else
      ShowMessage('E-mail nicht gesendet');
  finally
    Free;
    MIMEText.Free;
  end;
end
 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: E-Mail versenden mit Anhang

Beitrag von Epcop »

Hallo Michl,

vielen Dank für deine Hilfe. Ich habe deinen Code mit meinen Code verglichen. Alles Identisch. Ging trotzdem nicht.
Das hat mich nun ziemlich gewurmt, weil irgendwo muss ja ein Unterschied sein. Dachte zuerst, dass vielleicht ein Firewall oder eine fehlerhafte Datei der Grund sein könnte. Habe meinen Code nochmal genau angesehen und den Fehler gefunden:

Header.From := 'max.mustermann@web.com';

führte dazu, dass die E-Mail nicht versendet wurde.... Das .com am schluss. So oft draufgeschaut und trotzdem überlesen. Header.From muss also unbedingt richtig sein.

Ich begann schon mich mit SendEmail (http://caspian.dotconf.net/menu/Software/SendEmail/) vertraut zu machen,...

Danke für eure Hilfe.

Antworten