Toon posts:

[java] Controleren op valide e-mail

Pagina: 1
Acties:
  • 153 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Beste medetweakers,

Ik ben bezig met de javamail Api van sun om het 1 en ander te vergemakkelijken op emailgebied.

Zo ook zou ik graag willen of de email-adressen uit mijn database geldig zijn:

Properties zijn correct gezet, oa. goede emailProtocol en smtpServer.
MimeMessage zijn ook correct gezet o.a. setSubject, setContent, setRecipient 'indien valid emailadres dus' en setFrom 'hoewel ik een alias op zou willen geven naast het goede emailadres.

vervolgens:
message.saveChanges ();
Transport.send (message);

Maar indien de ontvanger een niet bestaand email adres is krijg ik o.a. de volgende Exception:
javax.mail.SendFailedException: 550 <presiedent@whitehouse.gov>
waarna het programma stuk loopt, de goede email adressen ten spijt. :(
Indien email adres bestaat, komt emailtje ook keurig aan :)

Hoe kan ik de foute adressen afvangen, zodat ik ze in mijn database bv. een 'flag' zou kunnen geven. En natuurlijk dat het programma gewoon doorgaat.
Liefst wil ik natuurlijk voor de actie: Transport.send(message) checken of emailadres valid is.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Ik zie een exception..... ik denk try{ } catch( )

Zoek daar maar eens op :) Ik kan me niet voorstellen dat jij een java programmeur bent als je dat niet wist. Misschien handig om eens een boek erover te kopen als je er mee verder wilt?

Verwijderd

Topicstarter
Glimi schreef op 15 April 2003 @ 17:29:
Ik zie een exception..... ik denk try{ } catch( )

Zoek daar maar eens op :) Ik kan me niet voorstellen dat jij een java programmeur bent als je dat niet wist. Misschien handig om eens een boek erover te kopen als je er mee verder wilt?
Die try { } catch()
wordt wel degelijk gebruikt.
code:
1
2
3
4
5
6
7
8
        try
    {
           Transport.send (message);
    }
    catch (Throwable t) 
    {
           System.out.println("foute email");
    }

Alleen wil ik weten of het mogelijk is om emailadressen te checken voordat ie er daadwerkelijk uit gaat.

[ Voor 15% gewijzigd door Verwijderd op 15-04-2003 17:40 ]


Verwijderd

Misschien is het een leuk idee om een goede error handler te schrijven. Ipv de fout naar het scherm te krijgen kan je ook een update query doen die het email adres als ongeldig vlagt. Verder vraag ik me af waarom je een eigen controle wil schrijven als die in de mail API het al prima doet.

[ Voor 4% gewijzigd door Verwijderd op 15-04-2003 17:44 ]


Verwijderd

Topicstarter
Maar core-probleem blijft het vooraf checken van een geldig adres.
in mijn catch (Throwable t) gebeurd nog meer, maar k'wil het simpel houden.
Vooraf checken van geldige email zou de performance, mijns inziens moeten verhogen. Verders gebruik ik ook addRecipients , maar daar moet geen verkeerde email bij zitten.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 15 April 2003 @ 17:33:
Alleen wil ik weten of het mogelijk is om emailadressen te checken voordat ie er daadwerkelijk uit gaat.
Wat dacht je van http://java.sun.com/j2ee/...tAddress(java.lang.String, boolean) te gebruiken op elk adres? Als je daarvan een exception krijgt, dan weet je dat het fout zit qua syntax van een adres.
Of ben je opzoek naar het fysieke bestaan van een mailbox?

[ Voor 17% gewijzigd door Glimi op 15-04-2003 17:56 ]


Verwijderd

Topicstarter
Glimi schreef op 15 April 2003 @ 17:56:
[...]


Wat dacht je van http://java.sun.com/j2ee/...tAddress(java.lang.String, boolean) te gebruiken op elk adres? Als je daarvan een exception krijgt, dan weet je dat het fout zit qua syntax van een adres.
Of ben je opzoek naar het fysieke bestaan van een mailbox?
Juist,
Ik wil weten of presiedent@whitehouse.gov bestaat.
Maar ik wil het weten voordat ik Transport.send(message); gebruik.

Verwijderd

Topicstarter
Het is dus geen javaMail probleem. Meer een configuratie probleem van de SMTP mail server.
Helaas, maar om nu een eigen mailServer op te gaan zetten?

  • ari3
  • Registratie: Augustus 2002
  • Niet online
Sommige mailserver staan het toe om te controleren of een mailadres bestaat. Het zgn. VRFY commando. Hiermee kun je controleren of een adres bekend is bij de mailserver. Zie RFC2821, sectie 3.5.1.

Mailservers zijn niet verplicht deze functionaliteit te implementeren, hoewel de RFC het wel aanbeveelt. Omdat deze functionaliteit misbruikt kan worden voor dos/privacy aanvallen wordt hij vaak uitgeschakeld.

Overigens heb je met SMTP nooit een garantie dat een bepaald adres bestaat of dat de email aankomt. Wat jij wilt is eigenlijk niet 100% waterdicht te doen. Helaas, zo werkt email nu eenmaal.

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


Verwijderd

Topicstarter
Maar zou het mogelijk zijn om te achterhalen op welke mailserver een bepaald email-adres zich bevindt?
Mijn emailadres bevind zich nl. op: smtp.hccnet.nl
Als SMTP server bekend is kan ik deze methode gebruiken: trans.connect(host, user, password).
Waar ik een andere waarde terugkrijg indien password invalid is en user is valid.
Pagina: 1