Ovde odradićemo dva scenarija. Prvi je onaj lakši a to je putem WordPress-a.
Kada je u pitanju wordpress postoji plugin za to i tu se nećemo previše baviti. Plugin je Contact Form 7. Nakon instalcije i podešavanja morate da postaite u svom wordpressu SMTP konekciju kako bi vaši emailovi stizali bez problema. A to možete da uradite pomoću našeg drugog članka SMTP i WordPress.
Onaj drugi deo koji je „teži“ jeste za HTML sajtove ili one koji imaju kontakt stranu koja je ručno urađena i ne koriste ni jedan CMS.
Pre svega potrebno je da skinete PHPMailer klikom na „Clone or downlaod“ a zatim na „Download ZIP“.
Kao na slici ispod
Nakon ovoga je potrebno da taj zip fajl postavite na svoj hosting nalog.
cPanel > File Manager > otvorite public_html folder i unutar njega opcija „upload“.
Kada ste završili upload onda desni klik na zip fajl i extract kao na slici:
Sada kada smo i to raspakovali onda je potrebno da uradimo našu stranu.
Naš primer ima sledeća polja:
<form action="kontaktforma.php" method="post">
Ime:<br>
<input type="text" id="fname" name="firstname" placeholder="Your name.."><br>
Prezime:<br>
<input type="text" id="lname" name="lastname" placeholder="Your last name.."><br>
Email:<br>
<input type="text" id="email" name="email"><br>
Text:<br>
<textarea id="tekst" name="tekst" placeholder="Write something.." style="height:200px"></textarea><br>
<input type="submit" value="Pošalji"><br>
</form>
Vaša kontakt forma svakako izgleda drugačije i ima drugačije nazive input elemanata i više ili manje polja, stim nemojte bukvalno da copy/paste već mini podešavanja koja su vezana za vašu kontakt formu.
Ključna stvar ovde jeste opcija u <form> a to je „action=“kontaktforma.php“ a to znaci da kada se klikne na „Pošalji“ time se šalje sadržaj polja na tu php stranu u našem slučaju kontaktforma.php (može biti ista strana a može biti i eksterna).
Sada ide podešavanj SMTP i PHPmailera za podatke koje smo poslali pomoću HTML kontakt forme.
PHPMailer izgleda ovako:
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
//Load Composer's autoloader
require 'vendor/autoload.php';
//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.example.com'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = '[email protected]'; //SMTP username
$mail->Password = 'secret'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption
$mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$mail->setFrom('[email protected]', 'Mailer');
$mail->addAddress('[email protected]', 'Joe User'); //Add a recipient
$mail->addAddress('[email protected]'); //Name is optional
$mail->addReplyTo('[email protected]', 'Information');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');
//Attachments
$mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name
//Content
$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';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Sada malo pojašnjenje u vezi ovog koda:
1* – $_POST[’email’] je email adresa koju je vaš posetilac uneo iz kontakt forme ovo [’email’] je u stvari <input name=’email’….> zavisno od vase kontakt forme kako ste nazvali taj input unos.
2* – U ovom redu kada vi kliknete na replay u svom email klijentu ko dobija odgovor uvek je isto kao i onaj ko je poslao kao u našem primeru.
3* – U ovom redu unosite vašu email adresu odnosno ko prima email iz kontakt forme
4* – Naslov ovde može i da stoji $_POST[naslov’] odnosno HTML <input name=’naslov’…> zavisno od vase kontakt forme. Mi u nasem primeru nismo imali polje za naslov.
5* – U ovom redu je tekst bez html-a već čist samo tekst.
6* – Ovde je moguće da se i HTML ubaci u sam body emaila jer je označeno odmah u sledećem redu da je email HTML (šta pod ovim podrazumevam wordpress članak može slikovito da vam pokaze OVDE)
Nakon ovoga je ostalo samo da izmenite tekst „Message sent!“ i error u vaše šta vi želite da pišete i to je sve.
Ispod možete da vidite kako smo mi i HTML formu i PHP stavili u jednom fajlu koji se zove kontaktforma.php
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require '/home/username/public_html/PHPMailer-master/src/Exception.php';
require '/home/username/public_html/PHPMailer-master/src/PHPMailer.php';
require '/home/username/public_html/PHPMailer-master/src/SMTP.php';
//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = false; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'mail.domen.tld'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = '[email protected]'; //SMTP username
$mail->Password = 'lozinka od email adrese iznad'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable implicit TLS encryption
$mail->Port = 587; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$mail->setFrom($_POST['email'], $_POST['firstname']." ".$_POST['lastname']);
$mail->addAddress('[email protected]'); //unosite email adresu na koju ce stizati poruke sa konakt forme
$mail->addReplyTo($_POST['email'], $_POST['firstname']." ".$_POST['lastname']);
//Content
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = "Kontakt sa sajta"; //ukoliko imate polje za naslov onda unesite ovde
$mail->Body = $_POST['tekst'];
$mail->AltBody = $_POST['tekst'];
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Mala napomena, ukoliko nakon postavljanja forme vam stiže veći broj spam mailova na vašu adresu potrebno je da postavite i https://www.google.com/recaptcha/intro/v3.html