PHPmailer lijkt niet ondersteund door provider
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
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
<?php
require 'lib\class.phpmailer.php';
$mail = new PHPMailer();
$mail->From = "[email protected]";
$mail->FromName = "xxx";
//html body
$body = "Hallo <font size=\"4\">Karin</font> ,<br />";
$body .= "hoe is het er mee?";
//plain text version
$text_body = "Hallo!\n";
$text_body .= "Hoe is het er mee?";
$mail->Body = $body;
$mail->AltBody = $text_body;
$mail->Subject = "Bevestiging van uw bestelling";
$mail->AddAddress("[email protected]", "Ikke");
//$mail->AddBCC($address);
// pdf aanmaken
require_once 'lib\fpdf.php';
class PDF extends FPDF
{
//Page header
function Header()
{
$this->Image("images/briefheader.png", 0, 0, 210, 56);
$this->Cell(0,35,'',0,1,'L');
}
//Page footer
function Footer()
{
$this->SetY(-15);
$this->SetFont('helvetica', 'I', 10 );
$this->Cell(0, 10, 'Naam van bedrijf',0,0, 'C');
}
}
$pdf=new PDF('P', 'mm', 'A4');
$pdf->AddPage();
$pdf->SetFont('helvetica', 'B', 16);
$pdf->Cell(40,10, 'FACTUUR');
//$pdf->Output();
$tmpfname = "H764fis/" . uniqid() . ".pdf";
//die($tmpfname);
$pdf->Output($tmpfname, 'F');
// attachement toevoegen
$mail->AddAttachment($_SERVER["DOCUMENT_ROOT"] . "/ScarlettMarijsPHP/$tmpfname", "factuurnr_13005.pdf");
if(!$mail->Send())
echo("De bevestigingse-mail en de factuur konden niet worden verstuurd. Controleer uw persoonlijke gegevens of neem contact met ons op.");
else
echo("Dank voor uw bestelling!<br /><br />U ontvangt de bevestigingse-mail en de factuur op het volgende e-mailadres: <br /><br />Na betaling van de factuur sturen wij uw artikelen op.");
?>
require 'lib\class.phpmailer.php';
$mail = new PHPMailer();
$mail->From = "[email protected]";
$mail->FromName = "xxx";
//html body
$body = "Hallo <font size=\"4\">Karin</font> ,<br />";
$body .= "hoe is het er mee?";
//plain text version
$text_body = "Hallo!\n";
$text_body .= "Hoe is het er mee?";
$mail->Body = $body;
$mail->AltBody = $text_body;
$mail->Subject = "Bevestiging van uw bestelling";
$mail->AddAddress("[email protected]", "Ikke");
//$mail->AddBCC($address);
// pdf aanmaken
require_once 'lib\fpdf.php';
class PDF extends FPDF
{
//Page header
function Header()
{
$this->Image("images/briefheader.png", 0, 0, 210, 56);
$this->Cell(0,35,'',0,1,'L');
}
//Page footer
function Footer()
{
$this->SetY(-15);
$this->SetFont('helvetica', 'I', 10 );
$this->Cell(0, 10, 'Naam van bedrijf',0,0, 'C');
}
}
$pdf=new PDF('P', 'mm', 'A4');
$pdf->AddPage();
$pdf->SetFont('helvetica', 'B', 16);
$pdf->Cell(40,10, 'FACTUUR');
//$pdf->Output();
$tmpfname = "H764fis/" . uniqid() . ".pdf";
//die($tmpfname);
$pdf->Output($tmpfname, 'F');
// attachement toevoegen
$mail->AddAttachment($_SERVER["DOCUMENT_ROOT"] . "/ScarlettMarijsPHP/$tmpfname", "factuurnr_13005.pdf");
if(!$mail->Send())
echo("De bevestigingse-mail en de factuur konden niet worden verstuurd. Controleer uw persoonlijke gegevens of neem contact met ons op.");
else
echo("Dank voor uw bestelling!<br /><br />U ontvangt de bevestigingse-mail en de factuur op het volgende e-mailadres: <br /><br />Na betaling van de factuur sturen wij uw artikelen op.");
?>
Gewijzigd op 03/08/2014 11:51:21 door Karin Gijssen
Karin Gijssen op 03/08/2014 10:54:05:
Hostnet geeft als tip dat ik de standaard PHPmail functie moet gebruiken (wat lastig is met bijlagen) en dat ze me verder niet kunnen helpen met dit onderwerp.
Dat is toch geen tip?! Hebben ze ook uitgelegd hoe je met de mailfunctie van PHP dan bijlagen moet versturen?
Zou eerst even de mailadressen uit je post / code halen.
Verder zou ik eerst de pdf-file aanmaken en daarna pas phpmailer aanroepen.
Daarmee houd je twee processen gescheiden.
Heb je al gekeken of het pdf-bestand wel wordt aangemaakt?
Ik heb de mailadressen verwijderd (dank voor de tip).
Hostnet zegt dat dit niet onder de ondersteuning valt. Ik kan best uitvinden hoe ik een attachment verstuur met de standaard mailfunctie, maar hiervoor is nu juist PHPmailer verzonnen. Raar dat ik die niet zou mogen gebruiken.
Bij mijn hostingpartij wordt de pdf bestand keurig aangemaakt en verzonden. Bij Hostnet wordt de pdf niet gemaakt, omdat hij zover niet komt. Goede tip om het aanmaken van de pdf apart te houden. Dan kan ik kijken of de pdf goed wordt aangemaakt. Ik heb overigens ook een test gedaan zonder pdf-bijlage (gewoon kaal mailtje) en dat werkt ook niet.
Klant aanraden een andere hostingpartij te zoeken?
Toevoeging op 03/08/2014 11:49:10:
Het lijkt er op dat ook fpdf.php niet werkt wordt bij hostnet...
Phpmailer maakt default volgens mij (uiteindelijk) gebruik van de php functie mail(). Je kunt ook anders, maar danmoet je dat zelf aangeven.
Zou raar zijn als phpmailer niet zou werken en mail wel.
Maar als de pdf niet wordtaangemaakt, dan kan het ook zijn dat phpmailer een probleem heeft wegens niet bestaand attachment.
Toevoeging op 03/08/2014 13:53:45:
Ah dat had je al wel getest. Krijg je nog foutmeldingen?
Toevoeging op 03/08/2014 13:56:12:
Hostnet. Dat is dje partij waar tussen vrijdagmiddag half 4 en maandag geen domeinen verhuisd kunnen worden.
Ben ik snel weer vertrokken. Kost weinig, heb je ook niets...
Ik heb nog veel eenvoudiger scriptjes gemaakt (zie hieronder), voor mail en pdf apart. Beide apart getest en ze werken prima bij mijn provider en niet bij Hostnet. Ik krijg geen foutmeldingen, alleen een wit scherm en geen opgeslagen pdf of verstuurde mail.
Nog eens gebeld met hostnet en die zeggen dat ze geen webdevelopers in dienst hebben en hierbij niet kunnen helpen(!), maar als ik het op de mail zou zetten, willen ze er nog eens naar kijken. Ben benieuwd. Ik denk dat we vast kunnen stellen dat dit geen PHP of inhoudelijk scriptprobleem is, maar een server/hosting probleem. Dank voor jullie hulp zover in ieder geval.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// testscriptje pdf
require_once 'lib\fpdf.php';
$pdf=new FPDF('P', 'mm', 'A4');
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(40,10, 'Test-pdf');
$tmpfname = "H764fis/" . uniqid();
$pdf->Output($tmpfname . ".pdf", 'F');
?>
// testscriptje pdf
require_once 'lib\fpdf.php';
$pdf=new FPDF('P', 'mm', 'A4');
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(40,10, 'Test-pdf');
$tmpfname = "H764fis/" . uniqid();
$pdf->Output($tmpfname . ".pdf", 'F');
?>
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// Testscriptje phpmailer:
require 'lib\class.phpmailer.php';
$mail = new PHPMailer();
$mail->From = "[email protected]";
$mail->FromName = "xxx";
//html body
$body = "Hello world! html";
//plain text version
$text_body = "Hello world! text";
$mail->Body = $body;
$mail->AltBody = $text_body;
$mail->Subject = "testmail";
$mail->AddAddress("[email protected]", "Ikke");
// verzenden
if(!$mail->Send())
echo("Niet gelukt");
else
echo("Wel gelukt");
?>
// Testscriptje phpmailer:
require 'lib\class.phpmailer.php';
$mail = new PHPMailer();
$mail->From = "[email protected]";
$mail->FromName = "xxx";
//html body
$body = "Hello world! html";
//plain text version
$text_body = "Hello world! text";
$mail->Body = $body;
$mail->AltBody = $text_body;
$mail->Subject = "testmail";
$mail->AddAddress("[email protected]", "Ikke");
// verzenden
if(!$mail->Send())
echo("Niet gelukt");
else
echo("Wel gelukt");
?>
Ik zou Swiftmailer doen in plaats van phpmailer, want met phpmailer heb je een kans dat het in de spambox terecht komt.
Was bij hoster ervoor nooit nodig.
Misschien zit het daar in.
Uit m'n hoofd was het iets van $mail->IsSMTP();
Ik zou eens kijken via phpinfo() welke PHP versie op hostnet draait. Misschien ondersteund PHPmailer en/of FPDF de oudere versie niet.
@LEDfan: het is PHP5.3, en de classes zijn daarmee compatible.
Toevoeging op 03/08/2014 15:46:58:
@GotoLearn: ik heb Swiftmailer gedownload en ga daar eens mee aan de slag. Wel lastiger voor een beginner omdat het Object geörienteerd is (zover was ik nog niet). Waarom loop ik met PHPmailer meer risico op de spambox?
Toevoeging op 03/08/2014 16:24:09:
Oplossing! Ik moet volgens de helpdesk de bestanden class.phpmailer.php en fpdf.php (en bijbehorende dingen als fonts etc.) in de root van de website zetten en daarnaar verwijzen (dus zonder lib\). Dan werkt het wel. Wel vreemd, want daarmee wordt mijn root wel een zootje. Maar als het niet anders kan...
Zorg eerst eens vor een foutmelding.
Wit scherm duidt vaak op een parse- of andere fatal error, in combinatie met 'onderdruk foutmeldingen'
Dan kun je dagen zoeken naar een missende spatie of een } te veel.
Php kan vrij duidelijke foutmeldingen geven, mits je dat niet uit zet.
http://wiki.pfz.nl/troubleshooter/#stap-1-regel-een-foutmelding
Toevoeging op 03/08/2014 16:27:50:
Waarschijnlijk heb je last van een path dat niet klopt.
Bij require had je een foutmelding moeten hebben die aangaf waar hij zocht (en niet vond)
@Ivo: Het is echt een Hostnetdingetje en geen codedingetje. Ik had wat echo's toegevoegd na verschillende regels en hij roept de classes gewoon niet aan in de submap en wel in de root. Het pad klopte wel. Het werkt op twee andere omgevingen ook gewoon prima met de originele code.
Het lijkt erop dat Ivo gelijk had dat je bij beide evenveel kans loopt dat het in spambox terecht komt, ahoewel die kans minder is als je gebruik maakt van SMTP, maar qua performance is Swiftmailer beter dan phpmailer. Hier een kleine tutorial om je op weg te helpen, mocht je gebruik willen maken van Swiftmailer:
http://www.sitepoint.com/sending-email-with-swift-mailer/
Maar je kan evengoed doorgaan met phpmailer, als dat prettiger is voor je en men is nu al je aan het helpen hier.
Voor dit project blijf ik voor nu even bij PHPmailer, maar als ik tijd over heb ga ik zeker ook kijken naar Swiftmailer, want performance is wel een belangrijk punt.
Er kunnen in PHP ook fouten optreden als gevolg van een andere server configuratie. en als jij een witte pagina krijgt dan wordt je script gewoon voortijdig stil gezet door een foutmelding. En nu zeg je dan eigenlijk tussen de regels door dat je niet wilt weten wat er fout gaat maar hoe wil je dan ooit de juiste oplossing krijgen?
PHP Mailer <-> SwiftMailer is gewoon beiden prima om mee te werken. Natuurlijk hebben we allemaal voorkeuren omdat onbekend onbemind is. Ik herken wat je zegt dat SwiftMailer meer OOP is. Werk je daarom liever met PHPMailer dan moet je dat gewoon doen.
foutmeldingen aanzetten in je scripts:
Hoi Frank, ik neem aan dat je die errorreporting in de liveomgeving weer uitzet, toch? Daar moet ik een echte foutafhandeling inbouwen, waar de gebruiker iets aan heeft.
als je script niet wil starten, dan kan hij dus ook niet de error reporting aan zetten. In het artikel dat ik hierboven aanhaalde, staat als het goed is ook hoe je dat in .htaccess doet.
--
In productie zet je de reporting uit/ log je naar een file. Sommige fouten zijn af te vangen en moeten gemeld worden aan de gebruiker (sorry, file bestaat niet, sorry mail server is koffie halen),
maar sommige fouten treden als het goed is alleen in je ontwikkel-traject op (
@Karin, Ja later kun je dat gewoon weer verwijderen, het is alleen maar voor het debuggen.
Toevoeging op 04/08/2014 13:34:20:
...en Frank
Dan is het mysterie nu helemaal opgelost!
juist..