Results 1 to 9 of 9

Thread: Een mail versturen met Synapse

  1. #1
    Senior Member
    Join Date
    Mar 2005
    Location
    Bassenge
    Posts
    424

    Een mail versturen met Synapse

    Lazarus 2.02 ---- Synapse 40


    Hallo,

    Ik heb een programma ontwikkeld waarmee de gebruiker de mogelijkheid heeft om al dan niet een crash-rapport
    te versturen naar mijzelf toe.

    Daar heb ik Synapse voor gebruikt.

    Ik roep deze functie hiervoor aan :

    function SendTo(const MailFrom, MailTo, Subject, SMTPHost: string; const MailData: TStrings): Boolean;

    Werkte overigens uitstekend. SMTP poort = 25

    Code:
    Uses  smtpsend;
    
    Var B : Boolean;
    begin
          B:=SendTo('mijn emailadres,'email van de verzender','subject','smtp. servernaam',Memo1.Lines); 
          If B = True then ShowMessage(' mail is verstuurd') else ShowMessage(' mail is niet verstuurd');
    end;
    Maar ondertussen hebben sommige internet-aanbieders geen SMTP server meer, en daarom kan ik deze functie niet meer benutten.
    Ik probeer daarom onderstaande functie te gebruiken.

    function SendToEx(const MailFrom, MailTo, Subject, SMTPHost: string; const MailData: TStrings; const Username, Password: string): Boolean;

    Mijn website staat gehost bij one.com die hun eigen SMTP server hebben met deze parameters :
    SMTP : send.one.com
    poort : 465 + SSL/TLS

    Ik probeer dus de SMTP server van mijn hoster te gebruiken, ik heb daar ook een mailaccount met een wachtwoord

    Code:
    uses SMTPsend;
    
    Var B : Boolean;
    begin
          B:=SendToEx(mijn emailadres,'email van de verzender','Subject','send.one.com:465',memo1.lines,'info@blabla.eu','paswoord');
          if B = True then ShowMessage('mail is verstuurd') else ShowMessage('mail is niet verstuurd');  
    end;
    Maar helaas werkt de code niet, de mail wordt niet verstuurd. Voorbeelden zijn op het net erg schaars. Daarom deze vraag :

    Wat is fout in de code ? Is de code volledig ? Dank voor jullie hulp.

  2. #2
    Lukt het je wel om met een andere email client, bijvoorbeeld outlook, email te versturen?

    Ik ken Synapse niet maar misschien kun je eerst proberen te connecten met de mailserver om te kijken of dat wel lukt. Misschien krijg je dan een foutmelding met een clue.

    Mijn ervaring is dat het ssl/tls gedeelte vaak de boosdoener is als het niet werkt. Meestal komt dit doordat de juiste DLL's niet gevonden kunnen worden/niet aanwezig zijn.

  3. #3
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    https://www.emailarchitect.net/easen...phi.aspx?cat=0
    Hier staan best veel handigheidjes en tips
    10.4.2, Delphi2010, of Lazarus 2.2.0

  4. #4
    Quote Originally Posted by jvb View Post
    Ik heb een programma ontwikkeld waarmee de gebruiker de mogelijkheid heeft om al dan niet een crash-rapport
    te versturen naar mijzelf toe.
    Persoonlijk zou ik niet direct de smtpserver gebruiken om een mail naar jezelf te laten sturen. Want dan ga je dus in feite je gebruikersnaam en wachtwoord van je one.com account uit handen geven.

    Een mogelijke andere oplossing is om een crash-rapport op te stellen en deze aan een mail te hangen in de standaard-mail client zodat de gebruiker deze kan verzenden. Via Windows Mapi. Zo doet de crash-afhandeling van de externe exception libraries het volgens mij ook.

    Een andere oplossing, en die ben ik gaan gebruiken, is een website-pagina maken waar je programma een crash-rapport naartoe kan posten, en die webpagina kan deze dan weer naar jou mailen. Voordeel van deze methode is dat de gebruiker niet zijn eigen mailclient hoeft te gebruiken (als ie die al heeft want tegenwoordig wordt er ook meer 'in the cloud' gedaan). De gebruiker hoeft zelf niet op verzenden te drukken. En je geeft niet je gebruikersnaam en wachtwoord van je eigen smtp server uit handen via je programma (want ja, die kunnen ze in de .exe-binary gewoon bekijken).

  5. #5
    Senior Member
    Join Date
    Mar 2005
    Location
    Bassenge
    Posts
    424
    Bedankt voor jullie reacties.

    Ondertussen heb ik Indy gebruikt, en nu werkt het wel. Het gebrek aan de juiste dll's bij Synapse zal waarschijnlijk de oorzaak zijn dat het niet werkt.
    Ik kan nu verder, maar de argumentatie van Rik doet nadenken, je gooit inderdaad je accountnaam en je paswoord op het internet ......

    Hoe je text moet posten op een webpagina, en vervolgens kan doormailen, daar heb ik geen idee van, maar ik ga het zeker bekijken. Heb je toevallig een link ?

    Dank.

  6. #6
    Heb je toegang tot een webserver/pagina waar je met PHP kunt werken? Die dus toegankelijk is vanuit de gebruikers van je programma.

    Zoja, dan zal ik (als ik weer achter de computer zit) een voorbeeldje plaatsen.

  7. #7
    Senior Member
    Join Date
    Mar 2005
    Location
    Bassenge
    Posts
    424
    Ja ik heb een eigen webpagina. Ik zou het fijn vinden als je een voorbeeld zou kunnen posten. Dank op voorhand.

  8. #8
    Ik heb een upload.php met het volgende (enigszins gestript).

    PHP Code:
    1. <h1>File Upload Results</h1>
    2. <?php
    3.  
    4. $subject = 'File uploaded';
    5. $mailto = 'mijn_email@domein.nl';
    6. $from_name = 'Mijn_naam';
    7. $from_mail = 'mijn_email@domein.nl';
    8. $replyto = $from_mail;
    9. $uid = md5(uniqid(time()));
    10. $message = 'Uploaded files ';
    11.  
    12. // header
    13. $header = "From: ".$from_name." <".$from_mail.">\n";
    14. $header .= "Reply-To: ".$replyto."\n";
    15. $header .= "MIME-Version: 1.0\n";
    16. $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\n\n";
    17.  
    18. // message & attachment
    19. $nmessage = "--".$uid."\n";
    20. $nmessage .= "Content-type:text/plain; charset=iso-8859-1\n";
    21. $nmessage .= "Content-Transfer-Encoding: 7bit\n\n";
    22. $nmessage .= $message."\n\n";
    23.  
    24. if (empty ($_FILES)){
    25.   echo 'No upload';
    26.   exit();
    27. }
    28.  
    29. // foreach($_FILES as $file_name) {
    30. foreach($_FILES as $file_name => $file_array) {
    31.   $content = file_get_contents($file_array['tmp_name']);
    32.   $size = strlen($content);
    33.   $content = chunk_split(base64_encode($content));
    34.   $filename = $file_array['name'];
    35.   $file_array['type'] = 'application/octet-stream';
    36.   $name=explode('.', $file_array['name']);
    37.   if ($name[1] == 'gif') { $file_array['type'] = 'image/gif'; }
    38.   if ($name[1] == 'txt') { $file_array['type'] = 'text/plain'; }
    39.   $nmessage .= "--".$uid."\n";
    40.   $nmessage .= "Content-Type: ".$file_array['type'].";\n name=\"".$filename."\"\n";
    41.   $nmessage .= "Content-Transfer-Encoding: base64\n";
    42.   $nmessage .= "Content-Disposition: inline\n\n";
    43.   $nmessage .= $content."\n";
    44. }
    45.  
    46. $nmessage .= "--".$uid."--"."\n"."\n";
    47.  
    48. if (mail($mailto, $subject, $nmessage, $header)) {
    49.     return true; // Or do something here
    50. } else {
    51.   return false;
    52. }
    53.  
    54. ?>

    In Delphi maak ik een crashrapport of screenshot (jpg) klaar (want dat kan ook) en heb dan een procedure UploadFile.
    Omdat de mail() de mail-functie van PHP en server gebruikt (die natuurlijk wel goed ingesteld moet staan) heb ik verder geen gedoe met mailen vanuit het programma.
    De UploadStream kan ook gebruikt worden als je niet eerst naar bestand op wilt slaan.

    Delphi Code:
    1. procedure UploadStream(FileName: string; Stream: TStream);
    2. var
    3.   URL: string;
    4.   rs: tStringlist;
    5. begin
    6.   Stream.Position := 0;
    7.   rs := tStringlist.Create;
    8.   try
    9.     URL := 'http://mijndomein.nl/upload.php';
    10.     HttpPostFile(URL, 'uploadfile', FileName, Stream, rs); // uit httpsend van synapse
    11.   finally
    12.     rs.free;
    13.   end;
    14. end;
    15.  
    16. procedure UploadFile(FileName: string);
    17. var
    18.   Stream: TFileStream;
    19. begin
    20.   if not FileExists(FileName) then Exit;
    21.   Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    22.   try
    23.       UploadStream(FileName, Stream);
    24.   finally
    25.       Stream.free;
    26.   end;
    27. end;

  9. #9
    Senior Member
    Join Date
    Mar 2005
    Location
    Bassenge
    Posts
    424
    schitterend , dank je wel Rik, ik ga jouw voorbeeld uit proberen, dank.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •