gmail account om maildiensten website te verzorgen.
Ik vroeg me af of ik via een gmail account mijn mail functie's kan opgang krijgen? Verzenden nieuwsbrieven, ontvangen van vragen en suggesties van bezoekers.
zo ja, hoe krijg je dit dan voor elkaar?
Puur omdat deze makkelijker werkt, makkelijker te debuggen is, en makkelijker te targetten op een bepaalde SMTP-mailserver, waaronder die van Gmail.
Als je grote hoevee;heiden nieuwsbrieven wil versturen zou ik dit overigens NIET via Gmail doen, maar via Mailchimp.
Maar het valt tegen.
bij het versturen van de mail krijg ik deze foutmelding:
14:57, 5th March
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Users\Tony\Desktop\USBWebserver v8.5\8.5\root\Eigen website\publiek\Contact\mailVraag.php on line 9
Er ging iets mis met het versturen van uw vraag.
ik heb in het php.ini file dit aangepast:
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 26
auth_username = [email protected]
auth_password = **********
; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]
en mijn php bestand ziet er als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
echo '<br />';
echo date('H:i, jS F'),'<br/>';
$hdrs = "From: ". $_POST['email'] ."\n";
$to = "[email protected]\n";
$subj = $_POST['onderwerp'];
$mailtext = "Datum: ". date('Y-m-d', time()). "\nVraag:\n"
. $_POST['vraagtekst']. "Naam: ". $_POST['afzender'] ;
if (mail($to, $subj, $mailtext, $hdrs))
echo "<br/>Je vraag is verstuurd.";
else
echo "<br/>Er ging iets mis met het versturen van uw vraag."
?>
echo '<br />';
echo date('H:i, jS F'),'<br/>';
$hdrs = "From: ". $_POST['email'] ."\n";
$to = "[email protected]\n";
$subj = $_POST['onderwerp'];
$mailtext = "Datum: ". date('Y-m-d', time()). "\nVraag:\n"
. $_POST['vraagtekst']. "Naam: ". $_POST['afzender'] ;
if (mail($to, $subj, $mailtext, $hdrs))
echo "<br/>Je vraag is verstuurd.";
else
echo "<br/>Er ging iets mis met het versturen van uw vraag."
?>
merci om eens te willen kijken.
16:03, 5th March
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Users\Tony\Desktop\USBWebserver v8.5\8.5\root\Eigen website\publiek\Contact\mailVraag.php on line 9
Er ging iets mis met het versturen van uw vraag.
in het ini bestand heb ik de poort nochtans aangepast naar 26 had ik ergens gelezen dat hij moeilijk deed met poort25, in de fout melding klapt hij nog steeds van poort 25 en localhost.
Aar dat klopt en als het goed is, is de smtp_port niet 26 maar 25
Onderstaand een voorbeeldje zo van het net geplukt. Je kan dit gebruiken en je eigen smtp van google invoeren:
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
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
<?php
require("class.PHPMailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Host = "smtp1.example.com;smtp2.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "jswan"; // SMTP username
$mail->Password = "secret"; // SMTP password
$mail->From = "[email protected]";
$mail->FromName = "Mailer";
$mail->AddAddress("[email protected]", "Josh Adams");
$mail->AddAddress("[email protected]"); // name is optional
$mail->AddReplyTo("[email protected]", "Information");
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments
$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
$mail->IsHTML(true); // set email format to HTML
$mail->Subject = "Here is the subject";
$mail->Body = "This is the HTML message body <b>in bold!</b>";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
?>
require("class.PHPMailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Host = "smtp1.example.com;smtp2.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "jswan"; // SMTP username
$mail->Password = "secret"; // SMTP password
$mail->From = "[email protected]";
$mail->FromName = "Mailer";
$mail->AddAddress("[email protected]", "Josh Adams");
$mail->AddAddress("[email protected]"); // name is optional
$mail->AddReplyTo("[email protected]", "Information");
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->AddAttachment("/var/tmp/file.tar.gz"); // add attachments
$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
$mail->IsHTML(true); // set email format to HTML
$mail->Subject = "Here is the subject";
$mail->Body = "This is the HTML message body <b>in bold!</b>";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
?>
Gewijzigd op 05/03/2015 16:16:40 door John D
Als je php.ini aanpast worden de wijzigingen pas meegenomen als je de webserver een restart geeft.
Je zou dan wat classes van libraries links en rechts bij elkaar kunnen sprokkelen om mail te versturen via je ISP, bijvoorbeeld die van het Zend Framework.
Of (eerste Google resultaat) is misschien dit iets. Deze kan gebruik maken van GMail lijkt het.
@JohnD - waar kunnen we die PHP class vinden?
Gewijzigd op 05/03/2015 16:16:41 door Thomas van den Heuvel
Thomas van den Heuvel op 05/03/2015 16:14:53:
De SMTP-server van je ISP is inderdaad de beste optie, ik gebruik dat zelf ook en dan ism phpmailer classes.Of je gebruikt de SMTP-server van je Internet Service Provider (ISP).
@JohnD - waar kunnen we die PHP class vinden?
@JohnD - waar kunnen we die PHP class vinden?
phpmailer classes kan je vinden op github maar ook op vele andere sites.
Google even phpmailer. Het is een complete mailer library en je hoeft verder niks bij elkaar te sprokkelen. Alles wat je nodig hebt is class.PHPMailer.php en class.smtp.php
https://github.com/PHPMailer/PHPMailer
Gewijzigd op 05/03/2015 16:26:11 door John D
heb dit opgelost, en nu krijg ik de volgende:
16:25, 5th March
Warning: mail() [function.mail]: Failed to connect to mailserver at "smtp.gmail.com" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Users\Tony\Desktop\USBWebserver v8.5\8.5\root\Eigen website\publiek\Contact\mailVraag.php on line 9
Er ging iets mis met het versturen van uw vraag.
@john, zie ik het gode dat hier phpmailer gebruikt word( moet hiervoor niet eerst iets geïnstalleerd worden?
@thomas, ik neem dit even door
Gewijzigd op 05/03/2015 16:36:54 door John D
Fatal error: Class 'Mail' not found in C:\Users\Tony\Desktop\USBWebserver v8.5\8.5\root\Eigen website\publiek\Contact\mail.php on line 17
en mijn mail.php ziet er zo uiy:
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
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
<?php
require_once "Mail.php";
$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
$host = "smtp.gmail.com";
$port = "587";
$username = "[email protected]";
$password = "******";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>
require_once "Mail.php";
$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
$host = "smtp.gmail.com";
$port = "587";
$username = "[email protected]";
$password = "******";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>
Je moet dit bestand zien als een hulpbestand die je helpt bij het uitvoeren van een taak (het versturen van mail). Zonder dit hulpbestand kan deze taak niet uitgevoerd worden omdat dan niet is voorgeschreven hoe dit zou moeten gebeuren.
Net zoals JohnD in zijn oplossing aangeeft: je moet code-bestanden downloaden en invoegen in je website, zodat deze code gebruikt kan worden bij hetgeen je wilt doen.
Ik krijg nu de volgende fout:
Fatal error: Class 'Mail' not found in C:\Users\Tony\Desktop\USBWebserver v8.5\8.5\root\Eigen website\publiek\Contact\mail.php on line 17
Toevoeging op 05/03/2015 17:35:52:
Tony Tony op 05/03/2015 17:09:27:
Ik heb de twee php bestanden opgeslaan in de root map.
Ik krijg nu de volgende fout:
Fatal error: Class 'Mail' not found in C:\Users\Tony\Desktop\USBWebserver v8.5\8.5\root\Eigen website\publiek\Contact\mail.php on line 17
Ik krijg nu de volgende fout:
Fatal error: Class 'Mail' not found in C:\Users\Tony\Desktop\USBWebserver v8.5\8.5\root\Eigen website\publiek\Contact\mail.php on line 17
Je moet in je code aangeven dat je van deze code gebruik wilt maken door deze "in te voegen" in je code.
Dit doe je met require of require_once of include of include_once.
Je moet er dus voor zorgen dat:
- je alle relevante hulpbestanden download
- je al deze bestanden uitpakt en ergens neerzet in je "project"
- je op de goede manier verwijst naar deze bestanden als je van deze functionaliteit gebruik wilt maken in je eigen code
De foutmelding geeft aan dat een of meer van de bovenstaande stappen niet goed is uitgevoerd.
omdat dit niet verplicht is laat ik het even liggen.alvast bedankt voor de moeite
John D op 05/03/2015 16:18:52:
Thomas van den Heuvel op 05/03/2015 16:14:53:
De SMTP-server van je ISP is inderdaad de beste optie, ik gebruik dat zelf ook en dan ism phpmailer classes.Of je gebruikt de SMTP-server van je Internet Service Provider (ISP).
@JohnD - waar kunnen we die PHP class vinden?
@JohnD - waar kunnen we die PHP class vinden?
SMTP gegevens van je emailrovider gebruiken is niet echt de beste optie.
Zodra je de deur uit loopt en bij de Mac zit, in de trein of op school werkt het namelijk niet meer. Providers weigeren om aan relaying te doen.
De SMTP van je provider doet het alleen wanneer je daadwerkelijk een internet verbinding via je provider hebt.
De beste optie blijft om de Gmail instellingen te gebruiken, die werken namelijk wel overal.
@Pipo: Het gaat om een website. Dat heeft niks te maken met waar de client zich bevindt.
Maar aangezien TS het onder Windows draait, is de kans groot dat het op zijn laptop staat.
- SanThe - op 12/03/2015 10:09:06:
@Pipo: Het gaat om een website. Dat heeft niks te maken met waar de client zich bevindt.
Geen idee hoe jij je website ontwerp doetmaar ik doe dit zeker niet op de server.
Normaal met XAMPP op de laptop of desktop en in een enkel geval op mijn NAS. En op de NAS heb ik de SMTP instellingen ook via GMAil lopen aangezien de meeste providers niet echt gelukkig worden van een eigen, lokale, mailserver en een realy-error genereren.
Op mijn laptop verstuur ik ook alle uitgaande mail via GMail aangezien ik er dan zeker van ebn dat het altijd en overal werkt.
Aangezien het hier om een schoolopdracht gaat, neem ik aan dat het op een laptop gebeurd die steeds weer via een andere internet provider zijn internet verbinding maakt.
Wanneer TO in de trein zit en iets wil testen is het wel zo prettig dat het daar net zo goed werkt als thuis waar hij verbinding heeft met zijn eigen provider.