как отправить почту с кодом (smtp) в drupal 7 (используя модуль поддержки аутентификации SMTP) - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь заменить приведенный ниже SMTP-клиент на поддельный SMTP-сервер, чтобы использовать его в целях разработки. Я использую https://www.drupal.org/project/smtp, но все, что я пробовал, не удалось. В тексте почтового сообщения я также включаю html.

Как бы вы предложили мне отредактировать приведенный ниже код, чтобы иметь возможность отправлять электронные письма через механизм drupal smtp? Я установил детали сервера smtp в настройках модуля smtp.

функция send_email ($ data, $ simulate = 0) {

$kok = '';
if ($data['p_nid']) {
    $pon = node_load($data['p_nid']);
    $kok = node_load($pon->og_group_ref['und'][0]['target_id']);
    if ($pon->field_wrong_email['und'][0]['value']) return 0;
}
if ($data['l_nid']) $kok = node_load($data['l_nid']);


$gid = $kok->nid ? $kok->nid : $data['gid'];


//create the senddata array
$send_data = [
    'sender'    => $data['from'],
    'to'      => $data['to'],
    'subject' => $data['subject'],
    'htmlContent'    => $data['message']
];

//attaching files if exist
if (is_array($data['attachments'])) $send_data['attachment'] = $data['attachments'];
if (is_array($data['files'])) {
    foreach ($data['files'] as $file) {
        $name = str_replace('.log','.txt',drupal_basename($file));
        $send_data['attachment'][] = ['content'=>base64_encode(file_get_contents($file)), 'name'=>$name];
    }
}

//from
$str = $kok->title;
if (mb_substr($str,0,68) != $str) {
    if ($kok->field_email_from['und'][0]['value']) $str = $kok->field_email_from['und'][0]['value'];
    else $str = mb_substr($str,0,68);
}
if (!$data['from']) {
    $send_data['sender'] = ['email'=>'someemail', 'name'=>'name'];
    if ($kok->nid) {
        $send_data['sender'] = ['email'=>'someemail', 'name'=>str_replace(',',' ',$str)];
    }
}

//reply-to
if (($kok->nid) and ($kok->field_email['und'][0]['email'])) {
    $send_data['replyTo'] = ['email'=>$kok->field_email['und'][0]['email'], 'name'=> str_replace(',',' ',$str)];
}
$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'APIKEYHERE');
$apiInstance = new SendinBlue\Client\Api\SMTPApi(
    new GuzzleHttp\Client(),
    $config
);

$sendSmtpEmail = new \SendinBlue\Client\Model\SendSmtpEmail($send_data);

if (!$simulate) {
    try {
        $result = $apiInstance->sendTransacEmail($sendSmtpEmail);
        $msg_id = $result->getMessageId();
    } catch (Exception $e) {
        echo 'Exception when calling SMTPApi->sendTransacEmail: ', $e->getCode().' '.$e->getMessage(), PHP_EOL;
        $err_msg = $e->getCode().' '.$e->getMessage(). '   l_nid='.$kok->nid.' '.$kok->title.' p_nid='.$data['p_nid'].' email_to='.$data['to']['email'].' '.var_dump($send_data);
        watchdog('sendinblue',$err_msg,[],WATCHDOG_ALERT);
        $msg = $e->getMessage();
        $pos = strpos($msg,'response:');
        $json = substr($msg, $pos+9, 1000);
        $json = json_decode($json);
        if (is_object($json) and ($json->message == "email is not valid in to")) {
            $pon = node_load($data['p_nid']);
            $pon->field_wrong_email['und'][0]['value'] = 1;
            node_save($pon);
        }
    }
...