Як відправляти листи та файли на пошту в PHP?
Можна використати стандартну для PHP функцію mail(), але такі листи в кращому випадку будуть в спамі, в гіршому, взагалі не дойдуть до отримувача, тому для відправки листів на пошту потрібно використовувати SMTP або POP3 протоколи.
На момент написання статті самим простим методом відправки листів на пошту через SMTP або POP3 протоколи в PHP залишається бібліотека PHPMailer.
Нижче наведу функцію яка використовує бібліотеку PHPMailer, вхідні параметри функції дозволяють прикріпити до листа файли а також декількох отримувачів:
function send_smtp_mail($title, $body, $file, $recipient_mail){ require 'phpmailer/PHPMailer.php'; require 'phpmailer/SMTP.php'; require 'phpmailer/Exception.php'; $mail = new PHPMailer\PHPMailer\PHPMailer(); try{ $mail->isSMTP(); $mail->CharSet = "UTF-8"; $mail->SMTPAuth = true; $mail->Host = 'smtp.site.com'; // хост сервера вашої пошти $mail->Username = 'support@site.com'; // Логін вашої пошти $mail->Password = 'pass'; // Пароль до вашої пошти $mail->SMTPSecure = 'TLS'; // або SSL $mail->Port = 25; // TLS - 25 / SSL - 465 $mail->setFrom('support@site.com', 'Support'); // перебираємо всіх отримувачів if(is_array($recipient_mail)){foreach($recipient_mail AS $_mail){$mail->addAddress($_mail);}}else{$mail->addAddress($recipient_mail);} // перебираємо всі прикріплені файли if(!empty($file['name'][0])){ for($ct = 0; $ct < count($file['tmp_name']); $ct++) { $uploadfile = tempnam(sys_get_temp_dir(), sha1($file['name'][$ct])); $filename = $file['name'][$ct]; if (move_uploaded_file($file['tmp_name'][$ct], $uploadfile)){$mail->addAttachment($uploadfile, $filename);} } } $mail->isHTML(true); $mail->Subject = $title; $mail->Body = $body; if($mail->send()){$result = "success";}else{$result = "error";} }catch(Exception $e){$result = 'Exception: '.$e;} return $result; }
Приклад використання функції:
// відправка листа з одним отримувачем, без прикріплених файлів send_smtp_mail('Заголовок листа', '<p>Контент</p>', '', 'user@gmail.com'); // відправка листа з декількома отримувачами та прикріпленими файлами send_smtp_mail('Заголовок листа', '<p>Контент</p>', $_FILES['files_input'], array('user@gmail.com', 'user_2@gmail.com', 'user_3@gmail.com'));