Class: E-mail v1.0

Door Bo az, 21 jaar geleden, 6.207x bekeken

Inleiding

clsMail heb ik gemaakt om niet iedere keer weer met headers te hoeven knoeien als er een e-mail verzonden moet worden.
De class zoals die nu is, is erg standaard en kan eventueel uitgebreid worden naar eigen inzicht.

Letop!

Deze class maakt gebruik van filter functies in PHP, hierdoor is de class pas bruikbaar vanaf PHP 5.2.0
Filter is standaard aanwezig vanaf PHP 5.2.0
Versie 1.0 van clsMail is getest met PHP 5.2.3-dev.
(Voor de geïnteresseerden: Filter gebruik ik hier om de e-mail adressen te valideren.)
Versie 1.0 bevat een belangrijke wijziging, hier is de mogelijkheid een Reply-To adres te specificeren toegevoegd. Nu is het dus ook mogelijk om adressen buiten uw domein als antwoord adres te gebruiken.

Changelog

v0.6
- filter_data vervangen door filter_var
v0.7
- Headers worden nu binnen de class als array opgeslagen.
- Methode voor het toevoegen van eigen headers.
- Constanten staan binnen de class
- Velden private gemaakt
- Of een mailException in de logfile komt is nu per geval aan te geven.
- PHPdocumentor documentatie beschikbaar op: http://php.n3rd.nl/clsMail/doc/
v1.0
- Bijlagen toevoegen
- CarbonCopy ontvangers toevoegen
- BlindCarbonCopy ontvangers toevoegen
- Reply-To adres toevoegen.
- Kleine fixes

clsMail

De methoden die gebruikt kunnen worden zijn te vinden in de online documentatie:
http://php.n3rd.nl/clsMail/doc/

Voor set methoden geldt dat ze maar 1x aangeroepen kunnen worden, gebeurd dit vaker worden de eerdere waarden overschreven.

Voor de add methoden geldt dat ze meerdere malen aangeroepen kunnen worden, er zal dan iets toegevoegd worden.

Aanroep van de class:
Bij de aanroep kan je 2 dingen opgeven, namelijk of de class HTML of tekst bevat en of de standaard headers meegestuurd moeten worden. Standaard wordt een tekst mail met standaard headers verstuurd.
Voor een HTML mail kan je de constante clsMail::HTML gebruiken.

mailException

Voor de clsMail wordt gebruik gemaakt van een eigen Exception class, deze is instaat om een errorlog bij te houden.
LETOP! Standaard wordt er een errorlog bijgehouden, daarvoor moet er een log directory aanwezig zijn, met een mail.log file met de juiste rechten!


Voorbeeld

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php

error_reporting(E_ALL);

require 'mail.inc.php';

try{
    //Instatie van het clsMail krijgen:
    $objMail = new clsMail();
    
    // Afzender invoegen:
    $objMail->setSender('[email protected]');
    
    // Ontvager toevoegen:
    $objMail->addReciever('[email protected]');
    
    // Een bericht toevoegen:
    $objMail->addMessage('Regel 1'.PHP_EOL);
    $objMail->addMessage('Regel 2'.PHP_EOL);
    
    // Een onderwerp invoegen:
    $objMail->setSubject('Test subject');
    
    // Een eigen header invoegen:
    $objMail->addHeader('Message-Id: '.md5(time()).'@localhost.ns');
    
    // E-mail verzenden:
    $objMail->sendMail();

    echo 'Verzonden.';
}
catch(mailException $e){
    echo "De mail kon niet verzonden worden om de volgende reden: <b>".$e->getMessage()."</b>";
}


?>

Gesponsorde koppelingen

PHP script bestanden

  1. class-email-v10

 

Er zijn 19 reacties op 'Overig'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


21 jaar geleden
 
0 +1 -0 -1
Ziet er erg netjes uit. Alleen jammer van dat PHP 5.2, maar goed de vooruitgang staat ook niet stil he.
Jelmer -
Jelmer -
21 jaar geleden
 
0 +1 -0 -1
1 dingetje: als je de headers in een array in plaats van een aan elkaar geplakte string had gedaan had je headers elkaar kunnen laten vervangen en wat meer hub hub trucjes. Wel handig voor als je er reply-mailtjes mee wilt maken, zo kan je nog mooi bcc en reply-to velden toevoegen. ... maar dat kan nu ook al.

Verder, ziet er mooi uit.

Ik zelf ben momenteel wat aan het experimenteren met de constanten in de klasse zelf op te nemen, om ze zo nog iets onafhankelijker te maken. Misschien een idee.
Bo az
Bo az
21 jaar geleden
 
0 +1 -0 -1
Dat zijn zeker geen gekke ideeën, headers is beter een array die ik later kan imploden net als ik al bij de ontvangende adressen doe.
Thomas M
Thomas M
21 jaar geleden
 
0 +1 -0 -1
Ziet er netjes uit! Mooie class waar je nog eens wwat aan hebt :)
Jelle -
Jelle -
21 jaar geleden
 
0 +1 -0 -1
waarom al uw velden protected defineren, is volgens mij voor niets nodig, aangezien je niet direct gaa overerven van die klasse...
Of heb ik het zo verkeerd op?
Bo az
Bo az
21 jaar geleden
 
0 +1 -0 -1
Ik heb er vandaag nog eens naar gekeken en heb een paar wijzigingen gedaan.
o.a. zoals aangegeven door Jelmer en Jelle, ook heb ik nette documentatie gegenereerd zie ook: http://php.n3rd.nl/clsMail/doc/
Rens Rikkerink
Rens Rikkerink
19 jaar geleden
 
0 +1 -0 -1
Is dit eigenlijk niet gewoon een veel te uitgebreide versie van mail()?
Het is wel handig zonder de headers.
Bo az
Bo az
19 jaar geleden
 
0 +1 -0 -1
Eigenlijk wel, maar met als belangrijkste voordelen dat je op een redelijk eenvoudige manier bijlagen kan toevoegen en dat je, je geen zorgen hoeft te maken over mail header injection.
Marcel
Marcel
19 jaar geleden
 
0 +1 -0 -1
Maar waarom dit en niet PHPMailer?
Bo az
Bo az
19 jaar geleden
 
0 +1 -0 -1
Marcel:
Maar waarom dit en niet PHPMailer?

Het kan het overwegen waard zijn deze te gebruiken als deze bied wat je nodig hebt.
Maar dat is niet de rede dat ik deze hier geplaatst heb. Deze heb ik gemaakt om van te leren en door hier te plaatsen kunnen anderen zeggen wat ze er van vinden en daar kunnen ik en andere geïnteresseerden van leren.
Marcel
Marcel
19 jaar geleden
 
0 +1 -0 -1
Ok maar als je zo zeker mogelijk wilt zijn van een goed werkende en veilige enz. klasse, kan je beter voor PHPmailer gaan dus?
Nick van der heijden
nick van der heijden
19 jaar geleden
 
0 +1 -0 -1
Heey ik heb een klein foutje ondekt in het eerste script staat $objMail->sendMail(); en in de include staat alleen

public function send(){
if(!mail(implode(', ', $this->m_aRecievers), $this->m_sSubject, $this->getMailBody(), implode(PHP_EOL, $this->getHeaders()))){
throw new mailException('Mail could not be send.', 501);

die public function send moet je veranderen in public function sendMail() anders krijg je een error

groeten
Nick
Marcel
Marcel
19 jaar geleden
 
0 +1 -0 -1
bump?
Marcel
Marcel
19 jaar geleden
 
0 +1 -0 -1
Arian Stolwijk
Arian Stolwijk
19 jaar geleden
 
0 +1 -0 -1
Echt een super script !

Ik had alleen één puntje.

Ik wilde een PDFje toevoegen, maar toen werd mijn Message tegen de scheidingsregel van de attachment geplakt, zonder dat er newlines tussen zaten. Daardoor zag je die hele lap base64 text in je bericht en geen bijlage.

Een simpele oplossing is om
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// Regel 319
        $sAttachment = '--'.$this->m_sBound.PHP_EOL;
?>


te vervangen door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// Regel 319
        $sAttachment = PHP_EOL.PHP_EOL.'--'.$this->m_sBound.PHP_EOL;
?>


oftewel gewoon 2 PHP_EOL voor die regel zetten zodat er newlines tussen de message en de attachment komen...
Derk  Janssen
Derk Janssen
17 jaar geleden
 
0 +1 -0 -1
Vraagje
Hoe pas ik die constante clsMail::HTM toe in het script kan iemand een voorbeeldje geven ?
Martijn Wieringa
Martijn Wieringa
17 jaar geleden
 
0 +1 -0 -1
De hele gedachte achtereen constante is dat je deze niet aanpast :)

Je gebruikt bij de aanroep:

new clsMail(2);

Dan stel je de mail in op HTML
Derk  Janssen
Derk Janssen
17 jaar geleden
 
0 +1 -0 -1
Ach bedankt dat was makkelijker dan ik dacht
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Arian Stolwijk
Arian Stolwijk
17 jaar geleden
 
0 +1 -0 -1
eigenlijk
new clsMail(cls::HTML);

hoef je niet eens die 2 te onthouden en zie je meteen wat het voorstelt

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. class-email-v10

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.