Всем добрый день.
Пишу модуль - форма обратной связи, через которую хочу отправлять заявки на почту.
Приведу текст файл \name_module\src\Form\feedback.php (смотри ниже)
Вопрос: письмо не отправляются. Подскажите несложный рабочий код отправки письма.
Модуль webform пожалуйста не предлагайте, мне надо это реализовать вручную.
<?php
namespace Drupal\feedback_form\Form;
use
Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
class
feedback_custom_form extends FormBase {
public function
getFormId() {
return 'feedback_form';
}
public function
buildForm(array $form, FormStateInterface $form_state) {
$form['feedback_name'] = array(
'#type' => 'textfield',
'#title' => t('Ваше имя:'),
'#attributes' => array('class' => array('form-control', 'mb-3')),
);
$form['feedback_phone'] = array(
'#type' => 'textfield',
'#title' => t('Ваш телефон:'),
'#required' => TRUE,
'#attributes' => array('class' => array('form-control', 'mb-3')),
);
$form['feedback_email'] = array(
'#type' => 'textfield',
'#title' => t('Ваш email:'),
'#attributes' => array('class' => array('form-control', 'mb-3')),
);
$form['feedback_text'] = array(
'#type' => 'textarea',
'#title' => t('Сообщение:'),
'#attributes' => array('class' => array('form-control', 'mb-3')),
);
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => 'Отправить',
'#attributes' => array('class' => array('btn', 'btn-primary')),
);
return $form;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
}
public function
submitForm(array &$form, FormStateInterface $form_state) {
$name = $form_state->getValue('feedback_name');
$phone = $form_state->getValue('feedback_phone');
$email = $form_state->getValue('feedback_email');
$message_text = $form_state->getValue('feedback_text');
$mail_message =
"Имя: ".$name."\n".
"Телефон: ".$phone."\n".
"Email: ".$email."\n".
"Текст сообещения: ".$message_text;
$send_mail = new \Drupal\Core\Mail\Plugin\Mail\PhpMail();
$from = $this->config('system.site')->get('mail');
$message = array();
$message['headers'] = array(
'content-type' => 'text/html; charset=UTF-8; format=flowed; delsp=yes',
'MIME-Version' => '1.0',
'reply-to' => $from,
'from' => ' <'.$from.'>',
'Return-Path' => $from,
);
$message['to'] = 'mail@ya.ru';
$message['subject'] = 'Заявка с сайта';
$message['body'] = $mail_message;
$send_mail->mail($message);
}
}
?>
Комментарии
Может необходимы какие-либо настройки сервера или еще что-то? Ни каких конфигураций не менял...
mail($to, $subject, $message); //- вот эта, одна масюхонькая строка отправляет письмо.
...прямо в спам
Все автоматические письма с серверов идут прямо в Спам.
У меня несколько сайтов на Друпале - Всё что шлёт сервер - в Спаме
У меня несколько сайтов на Друпале - всё что шлёт сервер, доходит до адресатов и не попадает в спам.
Посмотрел, ради интереса:
\Drupal\Core\Mail\Plugin\Mail\PhpMail();
Там тот же самый mail:
mail(
$to,
$subject,
$message,
$additional_headers,
$additional_params
);
Это лишь один из плагинов отправки почты. Конкретно этот плагин подходит лишь для тестирования, либо для корчей вроде тебя. На реальных проектах для отправки используют SMTP или на худой конец Sendmail
Sendmail не решит проблему с ip отправителя из пулов датацентров, спам-фильтры очень не любят такие ip.
А мне не понятны заморочки. Вы спамить собираетесь? Если нет - то каждый пользователь просто добавляет письмо в "Не Спам" и всё.
нормальные патсаны используют phpmailer.
composer require phpmailer/phpmailer
https://github.com/PHPMailer/PHPMailer
я не тестил.
еще народ рекомендует symfony_mailer