phpmailer attachment verzenden
Ik ben bezig met phpmailer om een attachment toe te voegen nu wil het met maar niet lukken om deze mee te sturen.
Hieronder de code
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = $smtp; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = $username; // SMTP username
$mail->Password = $password; // SMTP password
$mail->WordWrap = 100; // set word wrap to 100 characters
$mail->IsHTML(true); // set email format to HTML
$mail->AddReplyTo($repley_mail, $repley_name);
$mail->From =$from_mail;
$mail->FromName = $from_name;
$mail->AddAddress($toadres, $tonaam);
$mail->addBCC ($from_mail, $from_name);
$mail->Subject = $onderwerp;
$mail->Body = $inhoud_klant;
$mail->AltBody = $inhoud_klant;
$mail->AddAttachment(basename("/domains/domein.naam/public_html/customer/pdf/F0001.pdf"));
?>
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = $smtp; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = $username; // SMTP username
$mail->Password = $password; // SMTP password
$mail->WordWrap = 100; // set word wrap to 100 characters
$mail->IsHTML(true); // set email format to HTML
$mail->AddReplyTo($repley_mail, $repley_name);
$mail->From =$from_mail;
$mail->FromName = $from_name;
$mail->AddAddress($toadres, $tonaam);
$mail->addBCC ($from_mail, $from_name);
$mail->Subject = $onderwerp;
$mail->Body = $inhoud_klant;
$mail->AltBody = $inhoud_klant;
$mail->AddAttachment(basename("/domains/domein.naam/public_html/customer/pdf/F0001.pdf"));
?>
Is er iemand die op deze zondag mij hier mee kan helpen?
Alvast bedankt voor alle moeite
Misschien kun je eens een kijkje nemen hoe swiftmailer het doet, daar is het ook mogelijk.
Maja als ik een fiets heb en ik heb een lekke band ga ik toch ook niet een hele nieuwe fiets kopen. Hier moet ook mogelijk zijn lijkt me?
Klopt, maar Swiftmailer is ook makkelijk, misschien moet je het eens overwegen? En probeer het nog eens maar dan ff de basename functie eruit slopen!
daan schreef op 07.06.2009 16:43:
Maja als ik een fiets heb en ik heb een lekke band ga ik toch ook niet een hele nieuwe fiets kopen. Hier moet ook mogelijk zijn lijkt me?
maar je zou het wel kunnen overwegen.
En nee ik heb geen switfmailer geinstalleerd vind pure onzin om zo iets te gebruiken terwijl ook gewoon in phpmailer zit.
rvw schreef op 08.06.2009 11:59:
maar je zou het wel kunnen overwegen.
daan schreef op 07.06.2009 16:43:
Maja als ik een fiets heb en ik heb een lekke band ga ik toch ook niet een hele nieuwe fiets kopen. Hier moet ook mogelijk zijn lijkt me?
maar je zou het wel kunnen overwegen.
OVERWEGEN als iets niet lukt gebruik je het andere toch? ...
Wat de analogie met die fiets betreft:
Soms kan het wel nuttig zijn om vanaf 0 te herbeginnen.
Indien je deftig leert programmeren zou dat niet echt een probleem moeten zijn.
Je zou een eigen functie verzendMail($message, $from, $to, ...) moeten hebben.
Een aanpassing van de mail functionaliteit zou je dan ook enkel in de functie verzendMail moeten doen.
EDIT
Ik heb dit getest. Het werkt prima.
Voorbeeld van gebruik:
Download phpmailer v5 http://phpmailer.codeworxtech.com/index.php?pg=phpmailer en zet de files in de zelfde map als index.php (ofwel zet je ze elder, maar moet je het aanpassen in het script op lijn 84)
index.php
Code (php)
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
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
<?php
// TO DO gebruiker: pas deze gegevens eerst aan.
define ('Username', 'info');
define ('password', '******');
define ('host', '***.com');
define ('from', '***@***.com');
define ('from_name', 'Mijn Naam');
// laatste TO DO gebruiker:
define ('SEND_MAIL', false); // zet op true indien je de mail wil sturen. Indien false krijg je een print_r van het phpmailer object. Pas eerst alle gevevens aan. Test best eerst met false
switch( empty($_GET['p']) ? '' : $_GET['p'] )
{
default: echo '<html>
<head>
<style>
#add_attachment{cursor: pointer;}
input{width: 300px}
</style>
<script>
var index=0;
function addAttachment()
{
document.getElementById("attachments_div").innerHTML += "<div><input type=\"file\" name=\"attachment_"+ index++ +"\" /></div>";
}
</script>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="index.php?p=verzend">
<div><label><input type="text" name="from" value="'. from .'"/> from </label></div>
<div><label><input type="text" name="from_name" value="'. from_name .'"/> Display name </label></div>
<div><label><input type="text" name="subject" /> subject </label></div>
<div><label><textarea name="to" rows="5" cols="60">'. TO_ARRAY .'</textarea> to (1 per lijn)</label></div>
<div><label><textarea name="body" rows="10" cols="60"></textarea> body (geen html header toevoegen) </label></div>
<div id="add_attachment" onClick="addAttachment();">add attachment</div>
<div id="attachments_div"></div>
<div><label><input type="submit" value="Verzend mail"/></label></div>
</form>
</body>
</html>';
break;
case 'verzend':
if ( !empty($_POST ) )
{
$toArray = array();
$_POST['to'] = explode ("\n", $_POST['to']);
foreach($_POST['to'] as $to)
{
if (! empty($to) )
$toArray[] = trim($to);
}
$res = verzendMail( $_POST['body'],
$_POST['subject'],
$_POST['from'],
$toArray,
'contents.html',
host,
$_POST['from_name'],
SEND_MAIL ,
$_FILES
);
if ($res === true)
$message = 'mail verstuurd. <a href="index.php">terug</a>';
else
$message = '<pre>'. print_r($res,1) .'</pre>'; // in principe zou je hier iets anders mee doen, maar is is wel nuttig om dit eens te zien.
echo $message;
}
break;
}
function verzendMail($body, $subject, $from, $to=array(), $htmlHeaderFile, $host="", $fromName = "Emmanuel Delay", $doMail=false, $attachments )
{
/**
* Simple example script using PHPMailer with exceptions enabled
* @package phpmailer
* @version $Id$
*/
// Aangepast door Emmanuel Delay
try {
require 'class.phpmailer.php'; // eventueel het pad aanpassen. Zorg dat de file bestaat. Download phpmailer v5 http://phpmailer.codeworxtech.com/index.php?pg=phpmailer
if ($htmlHeaderFile)
{
$a = file_get_contents($htmlHeaderFile);
$a = str_replace('{title}', $subject, $a);
$a = str_replace('{body}', $body, $a);
$body = $a;
}
$mail = new PHPMailer(true); //New instance, with exceptions enabled
//$body = preg_replace('/\\\\/','', $body); //Strip backslashes
$mail->IsSMTP(); // tell the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = 25; // set the SMTP server port
$mail->Host = host; // "mail.yourdomain.com"; // SMTP server
$mail->Username = Username; //"[email protected]"; // SMTP server username
$mail->Password = password; // SMTP server password
$mail->IsSendmail(); // tell the class to use Sendmail
$mail->AddReplyTo($from,$fromName);
$mail->From = $from;
$mail->FromName = $fromName;
foreach ($to as $a)
$mail->AddAddress($a);
$mail->Subject = $subject ;
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->WordWrap = 80; // set word wrap
$mail->MsgHTML($body);
$mail->IsHTML(true); // send as HTML
$mail->attachmentsErrors = array();
foreach ($attachments as $key => $atachment)
{
if(! $mail->AddAttachment($atachment['tmp_name'], $atachment['name']) )
{
$mail->attachmentsErrors[] = $key;
}
}
if ($doMail)
{
return $mail->Send() ;
}
else
{
return $mail;
}
}
catch (phpmailerException $e)
{
$mail->errors = $e;
return $mail;
}
}
?>
// TO DO gebruiker: pas deze gegevens eerst aan.
define ('Username', 'info');
define ('password', '******');
define ('host', '***.com');
define ('from', '***@***.com');
define ('from_name', 'Mijn Naam');
// laatste TO DO gebruiker:
define ('SEND_MAIL', false); // zet op true indien je de mail wil sturen. Indien false krijg je een print_r van het phpmailer object. Pas eerst alle gevevens aan. Test best eerst met false
switch( empty($_GET['p']) ? '' : $_GET['p'] )
{
default: echo '<html>
<head>
<style>
#add_attachment{cursor: pointer;}
input{width: 300px}
</style>
<script>
var index=0;
function addAttachment()
{
document.getElementById("attachments_div").innerHTML += "<div><input type=\"file\" name=\"attachment_"+ index++ +"\" /></div>";
}
</script>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="index.php?p=verzend">
<div><label><input type="text" name="from" value="'. from .'"/> from </label></div>
<div><label><input type="text" name="from_name" value="'. from_name .'"/> Display name </label></div>
<div><label><input type="text" name="subject" /> subject </label></div>
<div><label><textarea name="to" rows="5" cols="60">'. TO_ARRAY .'</textarea> to (1 per lijn)</label></div>
<div><label><textarea name="body" rows="10" cols="60"></textarea> body (geen html header toevoegen) </label></div>
<div id="add_attachment" onClick="addAttachment();">add attachment</div>
<div id="attachments_div"></div>
<div><label><input type="submit" value="Verzend mail"/></label></div>
</form>
</body>
</html>';
break;
case 'verzend':
if ( !empty($_POST ) )
{
$toArray = array();
$_POST['to'] = explode ("\n", $_POST['to']);
foreach($_POST['to'] as $to)
{
if (! empty($to) )
$toArray[] = trim($to);
}
$res = verzendMail( $_POST['body'],
$_POST['subject'],
$_POST['from'],
$toArray,
'contents.html',
host,
$_POST['from_name'],
SEND_MAIL ,
$_FILES
);
if ($res === true)
$message = 'mail verstuurd. <a href="index.php">terug</a>';
else
$message = '<pre>'. print_r($res,1) .'</pre>'; // in principe zou je hier iets anders mee doen, maar is is wel nuttig om dit eens te zien.
echo $message;
}
break;
}
function verzendMail($body, $subject, $from, $to=array(), $htmlHeaderFile, $host="", $fromName = "Emmanuel Delay", $doMail=false, $attachments )
{
/**
* Simple example script using PHPMailer with exceptions enabled
* @package phpmailer
* @version $Id$
*/
// Aangepast door Emmanuel Delay
try {
require 'class.phpmailer.php'; // eventueel het pad aanpassen. Zorg dat de file bestaat. Download phpmailer v5 http://phpmailer.codeworxtech.com/index.php?pg=phpmailer
if ($htmlHeaderFile)
{
$a = file_get_contents($htmlHeaderFile);
$a = str_replace('{title}', $subject, $a);
$a = str_replace('{body}', $body, $a);
$body = $a;
}
$mail = new PHPMailer(true); //New instance, with exceptions enabled
//$body = preg_replace('/\\\\/','', $body); //Strip backslashes
$mail->IsSMTP(); // tell the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = 25; // set the SMTP server port
$mail->Host = host; // "mail.yourdomain.com"; // SMTP server
$mail->Username = Username; //"[email protected]"; // SMTP server username
$mail->Password = password; // SMTP server password
$mail->IsSendmail(); // tell the class to use Sendmail
$mail->AddReplyTo($from,$fromName);
$mail->From = $from;
$mail->FromName = $fromName;
foreach ($to as $a)
$mail->AddAddress($a);
$mail->Subject = $subject ;
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->WordWrap = 80; // set word wrap
$mail->MsgHTML($body);
$mail->IsHTML(true); // send as HTML
$mail->attachmentsErrors = array();
foreach ($attachments as $key => $atachment)
{
if(! $mail->AddAttachment($atachment['tmp_name'], $atachment['name']) )
{
$mail->attachmentsErrors[] = $key;
}
}
if ($doMail)
{
return $mail->Send() ;
}
else
{
return $mail;
}
}
catch (phpmailerException $e)
{
$mail->errors = $e;
return $mail;
}
}
?>
contents.html
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>{title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
{body}
</body>
</html>
<html>
<head>
<title>{title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
{body}
</body>
</html>
Beschouw dit niet als een script dat af is. Beveilig zelf, breid dit zelf uit.
Je doet er mee wat je wil.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Voert phpmailer dan zelf geen controles uit, dat het nodig is om het script zelf te beveiligen?