Drupal 9 как отравить письмо программно?

Главные вкладки

Аватар пользователя nick80 nick80 8 июня 2023 в 16:20

Всем добрый день.
Пишу модуль - форма обратной связи, через которую хочу отправлять заявки на почту.
Приведу текст файл \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 $formFormStateInterface $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 &$formFormStateInterface $form_state) {

}
  
  
public function 

submitForm(array &$formFormStateInterface $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); 
 
  } 
}
?>

Комментарии

Аватар пользователя kompospec kompospec 11 июня 2023 в 9:09

Все автоматические письма с серверов идут прямо в Спам.
У меня несколько сайтов на Друпале - Всё что шлёт сервер - в Спаме

Аватар пользователя kompospec kompospec 11 июня 2023 в 9:33

Посмотрел, ради интереса:
\Drupal\Core\Mail\Plugin\Mail\PhpMail();

Там тот же самый mail:

mail(
$to,
$subject,
$message,
$additional_headers,
$additional_params
);

Аватар пользователя gun_dose gun_dose 11 июня 2023 в 13:20
1

Это лишь один из плагинов отправки почты. Конкретно этот плагин подходит лишь для тестирования, либо для корчей вроде тебя. На реальных проектах для отправки используют SMTP или на худой конец Sendmail

Аватар пользователя kompospec kompospec 12 июня 2023 в 18:27

А мне не понятны заморочки. Вы спамить собираетесь? Если нет - то каждый пользователь просто добавляет письмо в "Не Спам" и всё.