Page 1 of 2 1 2 LastLast
Results 1 to 15 of 24

Thread: Mail functie

  1. #1

    Mail functie

    Goedemorgen,

    Ik zou graag een mail functie in mijn applicatie willen hebben.
    Nou is dat niet moeilijk om voor melkaar te krijgen.
    Heb een speedbutton erin gegooit met deze code erachter;
    Code:
    procedure TForm3.SpeedButton3Click(Sender: TObject);
    begin
      ShellExecute(0,'open','mailto: peter@preview.org?subject=Opvragen onbekende gegevens&body=De volgende gegevens ontbreken',
      NIL, NIL, SW_SHOWNORMAL);
    end;
    Werkt helaam zoals het zou moeten werken.
    Maar wat ik dus graag zou willen is dat hij een standaar mail aanmaakt met door mij aangegeven standaard tekst en dat hij dan automatisch de geselecteerde data van een rij in de dbgrid in de mail gooit, plus de standaard text. Is dit mogelijk?
    In mijn database staat er achter elke persoon een mail adres van een contactpersoon, wat mij handig leek is dat de mail functie direct het juiste mail adres pakt die achter de geselecteerde persoon staat. Iemand idee het dit zal moeten.
    Ik werk met:

    Acces database

    ADOConnection
    ADOTable
    TDatasource
    DBGrid

    Alvast bedankt.

  2. #2
    Dat is toch een kwestie van de gegevens uitlezen en achter elkaar plakken? bijvoorbeeld ongeveer zo:
    Delphi Code:
    1. var
    2.   Email: string;
    3. begin
    4.   Email := Format('mailto:%s?subject=test&body=Beste %s, (standaard mail tekst).', [
    5.       AdoTable1.FieldByName('email').AsString,
    6.       AdoTable1.FieldByName('naam').AsString] );
    7.  
    8.   ShellExecute(0,  'open', PChar(Email), nil, nil, SW_SHOWNORMAL);
    9. end;

    Ik gebruik de format functie om eenvoudig variabelen in te voegen in de string. Dat is een stuk overzichtelijker. Ook gebruik ik een typecast naar PChar omdat shellExecute eigenlijk geen strings maar PChars wil. Constante strings worden door de compiler impliciet getypecast naar PChars, daarom hoeft dat voor de andere parameters niet.
    1+1=b

  3. #3
    Jep werkt

    Maar hoe krijg ik er enters in ?
    Heb al geprobeerd om dit achter een woord te zetten : %0D%0A.
    Krijg de foutmelding: Format '%OD' invalid or incompatible with argument.

    hier is de code:
    Code:
    procedure TForm3.SpeedButton3Click(Sender: TObject);
    var
      Email: string;
    begin
      Email := Format('mailto:%s?subject=opvragen gegevens&body=Beste %s,%0D%0A De volgende gegevens ontbreken: %0D%0A Geslacht: %s %0D%0A Voornaam: %s   %0D%0A Achternaam: %s   Geboortedatum: %s Leeftijd: %s Graag zo spoedig mogelijk reageren, Alvast bedankt.', [
          Ado1.FieldByName('contactpersoon').AsString,
          Ado1.FieldByName('contactpersoonnaam').AsString,
          Ado1.FieldByName('geslacht').AsString,
          Ado1.FieldByName('voornaam').AsString,
          Ado1.FieldByName('achternaam').AsString,
          Ado1.FieldByName('dag jarig').AsString,
          Ado1.FieldByName('leeftijd').AsString] );
    
      ShellExecute(0,  'open', PChar(Email), nil, nil, SW_SHOWNORMAL);
    end;

  4. #4
    Senior Member Henk Schreij's Avatar
    Join Date
    Sep 2002
    Location
    Heino (Raalte)
    Posts
    1,465
    Format reageert op de % in %0D.
    Daarvoor zou je eerst de var Email kunnen maken met bv #13#10 voor een nwe regel.
    En dan een StringReplace op Email loslaten, om die om te zetten in %0D%0A (met rfReplaceAll).

    Zo doe ik het als ik een Memo gebruik waarin ik meerdere regels heb staan.

  5. #5
    Senior Member Henk Schreij's Avatar
    Join Date
    Sep 2002
    Location
    Heino (Raalte)
    Posts
    1,465
    Nog even een opmerking:

    Op deze eenvoudige manier een email versturen heeft wel zijn beperkingen.
    Eentje waar jij misschien tegen aanloopt is dat de totale lengte van de string,
    inclusief stuurcommando's, etc, niet groter mag zijn dan 384 (3 x 128) Bytes.
    Houd dus je zinnen kort en verstuur alleen het hoogst noodzakelijke.

  6. #6
    Je kunt ook de % tekens verdubbelen die je letterlijk wilt invoegen, dus maak er %%0D%%0A van.
    1+1=b

  7. #7
    Quote Originally Posted by GolezTrol View Post
    Je kunt ook de % tekens verdubbelen die je letterlijk wilt invoegen, dus maak er %%0D%%0A van.
    Dit werkt, alleen nu merk ik het nadeel aan deze methode.
    zoals Henk al zei, de limiet van tekst die je kan gebruiken is erg weinig
    Wat is een goeie andere manier om zo mail functie te implenteren?
    Tips?

  8. #8
    Nou, niet zo. Het grote voordeel van deze oplossing is dat ie werkt voor de geïnstalleerde mail client. Er zijn andere oplossingen, die ook al vaker zijn aangehaald overigens, maar die hebben weer andere nadelen.
    - rechtstreeks de mail client aansturen, bijvoorbeeld Outlook via Automation zo ver krijgen om een mailtje te maken. Nadeel: Dat kan resulteren in beveiligingsmeldingen (testen op welk punt dit wel of niet gebeurt). Ander nadeel is dat je dan specifiek aan Outlook vast zit (en/of eventuele andere clients waar je het voor bouwt).
    - Zelf sturen van het mailtje met Indy. Nadeel: Je werkt dan helemaal buiten de client om. Je moet zelf de mail verzenden, en dus ook zelf de mailserver instellingen bepalen of vragen aan de gebruiker. Ook moet je, als je wilt dat je gebruiker de mail kan bewerken, een editor aanbieden.
    1+1=b

  9. #9
    hmm ja daar was ik al bang voor :P
    Het moet simpel zijn, want ouderen moet ermee kunnen werken dus zelf dingen instellen wordt moeilijk voor ze
    Is het misschien een mogelijkheid dat ik de persoongegevens in een memo laat laden en deze dan in de mail laat laden? Dit bespaart mij lijkt me text..

  10. #10
    Nou nee, die tekst in die memo telt natuurlijk ook mee voor die 384 tekens.
    1+1=b

  11. #11
    Senior Member Henk Schreij's Avatar
    Join Date
    Sep 2002
    Location
    Heino (Raalte)
    Posts
    1,465
    Quote Originally Posted by Syts View Post
    Dit werkt, alleen nu merk ik het nadeel aan deze methode.
    zoals Henk al zei, de limiet van tekst die je kan gebruiken is erg weinig
    Wat is een goeie andere manier om zo mail functie te implenteren?
    Tips?
    Het enige wat nog kan als het niet in 1 mail past is:

    Twee emails sturen.

    Toch is dit een serieus te nemen antwoord.
    Zet in mail 1 a/h eind bijvoorbeeld:
    Uw gegevens krijgt u in een aparte email.

    Als het niet in 2 emails past, dan weet ik het ook niet.
    Om de redenen die GolezTrol al aangaf, kun je anders niet zo gemakkelijk mails versturen

  12. #12
    is het misschien niet mogelijk om de gegevens die in de database staan als bijlage toe te voegen. Bespaard dit dan tekst?

  13. #13
    *+E13818MU01F0F* Norrit's Avatar
    Join Date
    Aug 2001
    Location
    Landgraaf
    Posts
    967
    Je kunt toch ook direct het smapi protocol aanspreken... De shellexecute doet dit namelijk ook indirect...
    Dan zit je niet meer gelimiteerd aan 300 nog-wat karakters (wat nu dus het probleem is)...
    Objective reality is a delirium caused by lack of alcohol in blood

  14. #14
    TDigitalTrain user Hans Brenkman's Avatar
    Join Date
    Mar 2002
    Location
    Weert
    Posts
    1,861
    Ik heb in het verleden wel eens de mail functie van Indy gebruikt maar tegenwoordig gebruik ik madExcept en/of FastReport. Deze bevatten beide mailfunctionaliteit en we mailen daar geautomatiseerd complexen blokken tekst incl. data uit tabellen mee en ook bestanden zoals pdf's waarin rapportages staan voor onze klanten. De software stuurt de te verzenden mail naar onze smtp server, die het uiteindelijk verstuurd.
    Testen kan niet de afwezigheid van fouten aantonen, slechts de aanwezigheid van gevonden fouten.

    Het is verdacht als een nieuw ontwikkeld programma direct lijkt te werken: waarschijnlijk neutraliseren twee ontwerpfouten elkaar.

  15. #15
    Senior Member Henk Schreij's Avatar
    Join Date
    Sep 2002
    Location
    Heino (Raalte)
    Posts
    1,465
    Quote Originally Posted by Syts View Post
    is het misschien niet mogelijk om de gegevens die in de database staan als bijlage toe te voegen?
    Helaas, als je de methode via ShellExecute gebruikt, dan kun je geen bijlagen toevoegen.

    Als het te veel tekst is, dan moet je een andere weg bewandelen.

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

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

Tags for this Thread

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
  •