Contactformulier met Swift Mailer

Toelichting

Als je bezoekers van je website de mogelijkheid wilt geven om eenvoudig met je in contact te komen, is het gebruik van een contactformulier een mooie oplossing. Gebruikers kunnen een formuliertje invullen en het bericht wordt naar een emailadres verstuurt.

In dit script maak ik gebruik van de Swift Mailer klasse om het bericht te versturen. In de afhandeling van het formulier gebruik ik een filter om het email adres van de afzender te controleren en exceptions om de foutafhandeling te verzorgen. Daarom is dit script alleen geschikt vanaf PHP 5.

De Swift Mailer klasse is hier te downloaden.

Let op: dit script is gebasseerd op een oudere versie van Swift mailer. Bij gebruik van de nieuwste versie is de vereiste syntax enigzins anders. Lees de documentatie van Swift mailer om te zien hoe je nu een mail moet versturen!

Voorbeeld

Klik hier voor een voorbeeld

Script

Code
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<?php
ini_set
('display_errors'1);
error_reporting(E_ALL);
session_start();

if(
$_SERVER['REQUEST_METHOD'] == 'POST')
{
    
$aErrors = array();
    
$_SESSION['errors'] = array();
    
    
$aFormuliervelden = array (
        
'naam',
        
'email',
        
'bericht'
    
);
    
    foreach(
$aFormuliervelden as $sVeld)
    {
        if(isset(
$_POST[$sVeld]))
        {    
            
$sValue trim($_POST[$sVeld]);
            if(empty(
$sValue))
            {
                
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
                
$_SESSION['errors'][$sVeld] = true;
            }
            elseif(
$sVeld == 'email')
            {
                if(!
filter_var($sValueFILTER_VALIDATE_EMAIL))
                {
                    
$aErrors[] = 'Je hebt geen geldig email adres ingevuld!';
                    
$_SESSION['errors'][$sVeld] = true;
                }
            }
            
$_SESSION['input'][$sVeld] = $sValue;
        }
        else
        {
            
$aErrors[] = 'Er ontbreekt een gegeven';
        }
    }
    
    if(empty(
$aErrors))
    {    
        try
        {    
            require_once 
$_SERVER['DOCUMENT_ROOT']."/../private/libs/Swift.php";
            require_once 
$_SERVER['DOCUMENT_ROOT']."/../private/libs/Swift/Connection/SMTP.php";
            
            
/* De SMTP server die gebruikt wordt om de mail te verzenden, vul hier je eigen server in! */
            
$oSmtp = new Swift_Connection_SMTP('mail.jorendewit.nl'26);
            
            
/* Eventuele logingegevens voor de server kun je hieronder kwijt: */
            // $oSmtp->setUsername('****');
            // $oSmtp->setPassword('****');
            
            
$oSwift = new Swift($oSmtp);
            
            
// Verander hier het emailadres van de ontvanger
            
$oTo = new Swift_Address('jouw@emailadres.nl');
            
$oFrom = new Swift_Address($_SESSION['input']['email'], $_SESSION['input']['naam']);
            
            
$sSubject 'Contactbericht van '.$_SESSION['input']['naam'];
            
$sMessage '<html>
                            <head>
                                <style type="text/css">
                                    body { font-family: "Verdana"; }
                                    h1 { font-size: 14px; }
                                    p { font-size: 11px; }
                                </style>
                            </head>
                            
                            <body>
                                <h1>Contactbericht</h1>
                                <p>Afzender: '
.htmlentities($_SESSION['input']['naam']).'</p>
                                <p>'
.htmlentities($_SESSION['input']['bericht']).'</p>
                            </body>
                        </html>'
;
            
            
$oMessage = new Swift_Message($sSubject$sMessage'text/html');
            
            
/** 
            * In het voorbeeld is het verzenden uitgeschakeld!
            * Uncomment de regels hieronder om het verzenden te activeren.
            **/
            // $oSwift->send($oMessage, $oTo, $oFrom);
            // $aContent[] = 'Je bericht is succesvol verzonden!';
            
            
$aContent[] = 'In dit voorbeeld wordt geen mail verzonden. In principe zou dat nu wel succesvol gelukt zijn!';
            
$_SESSION['input'] = array();
        }
        catch(
Swift_ConnectionException $e)
        {
            
$aErrors[] = 'Er is een fout opgetreden bij het verzenden van het bericht, probeer het later nog eens.';
            
$aErrors[] = 'Deze fout is wellicht opgetreden omdat dit een voorbeeld is...';
        }
    }        
}        
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Jorendewit.nl - PHP Scripts - Contactformulier met Swift Mailer</title>
    
    <link rel="stylesheet" href="../styles/default.css" type="text/css" media="screen" />
    
    <style type="text/css">        
        input.error, textarea.error {
            border: 2px solid #FF0000;
        }
    </style>
</head>

<body>
    <div id="wrap">
        <p class="none small align-right"><a href="/view/38/">&lt;-- Terug naar Scripts</a></p>
        <h1>Contactformulier met Swift Mailer</h1>
        
        <div id="info">
            <p>PHP versie: &gt;= 5</p>
        </div>
        
        <?php
        
// Weergeven van meldingen uit het PHP script.
        
if(!empty($aErrors))
        {
            echo 
'<ul>';
            foreach(
$aErrors as $sError)
            {
                echo 
'<li>'.$sError.'</li>'
            }
            echo 
'</ul>';
        }
        elseif(isset(
$aContent))
        {
            foreach(
$aContent as $sLine)
            {
                echo 
'<p>'.$sLine.'</p>';
            }
        }
        
?>
                        
        <form action="/script_sources/contact.php" method="post" name="contact">
        <p>
            <label class="field" for="naam">Naam:</label>
            <input type="text" 
                id="naam" 
                name="naam" 
                value="<?php echo isset($_SESSION['input']['naam']) ? $_SESSION['input']['naam'] : ''?>"
                class="<?php echo (isset($_SESSION['errors']['naam']) && $_SESSION['errors']['naam'] == 'true') ? 'error' ''?>"
            />
        </p>
        <p>
            <label class="field" for="email">Email adres:</label>
            <input type="text" 
                id="email" 
                name="email" 
                value="<?php echo isset($_SESSION['input']['email']) ? $_SESSION['input']['email'] : ''?>"
                class="<?php echo (isset($_SESSION['errors']['email']) && $_SESSION['errors']['email'] == 'true') ? 'error' ''?>"
            />
        </p>
        <p>
            <label class="field" for="bericht">Bericht:</label>
            <textarea 
                id="bericht" 
                name="bericht" 
                class="none <?php echo (isset($_SESSION['errors']['bericht']) && $_SESSION['errors']['bericht'] == 'true') ? 'error' ''?>
                cols="70" 
                rows="10"><?php echo isset($_SESSION['input']['bericht']) ? $_SESSION['input']['bericht'] : ''?></textarea>
        </p>
        <p>
            <input type="submit" value="Verzenden" />
        </p>
        </form>                
    </div>
    
</body>
</html>

Reacties