Как изменить код для отправки сообщений через SMTP?

Как можно настроить PHPMailer для заполнения свойств $mail->From и $mail->addAddress данными из базы данных? В текущем коде они остаются пустыми, хотя если их заполнить вручную, все работает. Вот участок старого кода, где данные берутся из базы данных. Как соединить эти два блока кода?
  • 15 августа 2024 г. 9:23
Ответы на вопрос 2
Для отправки сообщений через SMTP с помощью PHPMailer, необходимо задать параметры для подключения к серверу SMTP. Например, можно сделать следующим образом:

```php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

// Создаем новый объект PHPMailer
$mail = new PHPMailer();

// Настройки SMTP сервера
$mail->IsSMTP();
$mail->Host = 'smtp.example.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = 'your_username';
$mail->Password = 'your_password';

// От кого и кому отправляем сообщение
$mail->From = 'your_email@example.com';
$mail->addAddress('recipient@example.com', 'Recipient Name');

// Создаем соединение с базой данных
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');

// Получаем данные из базы данных
$query = "SELECT email, name FROM users WHERE id = 1";
$result = $mysqli->query($query);
$row = $result->fetch_assoc();

// Устанавливаем данные для отправителя и получателя из базы данных
$mail->From = $row['email'];
$mail->addAddress($row['email'], $row['name']);

// Отправляем сообщение
$mail->Subject = 'Тема сообщения';
$mail->Body = 'Содержание сообщения';

if($mail->send()) {
    echo 'Сообщение успешно отправлено';
} else {
    echo 'Ошибка: ' . $mail->ErrorInfo;
}
```

В этом примере мы подключаем PHPMailer, настраиваем SMTP сервер, создаем соединение с базой данных, получаем данные из базы данных и заполняем свойства $mail->From и $mail->addAddress данными из базы данных. В конце отправляем сообщение.

Обратите внимание, что перед использованием этого кода необходимо установить PHPMailer через Composer и настроить параметры подключения к SMTP серверу.
Вместо <code>mysqli_query()</code> лучше используйте <a href="https://www.php.net/manual/ru/book.pdo.php" rel="nofollow">PDO</a> ( <a href="https://phpfaq.ru/pdo" rel="nofollow">примеры</a> ) <br/> <br/> По проблеме. Не совсем понятно, что вы хотите добавить для PHPMailer, в From и addAddress у вас пустые строки. <br/> Если я правильно понял, то примерно так: <br/> <br/> <pre><code class="php">require 'PHPMailerAutoload.php';

$id = intval($_REQUEST['id']);
if (isset($id)) {
    $r = mysqli_query($link,"SELECT * FROM book WHERE id='".$id."'");
    $rr = mysqli_fetch_array($r);
    
    // замените на ваши поля
    $recipient = $rr['recipient'];
    $sender = $rr['sender'];

    $mail = new PHPMailer;

    $mail-&gt;isSMTP();// Настройте почтовую программу на использование SMTP
    $mail-&gt;Host = 'ssl://mail.host';  // Укажите SMTP-сервер
    $mail-&gt;Port = 465;
    $mail-&gt;SMTPAuth = true;  // Включить аутентификацию SMTP
    $mail-&gt;Username = '******';  // SMTP username
    $mail-&gt;Password = '*******'; // SMTP password
    $mail-&gt;SMTPSecure = 'ssl';  // Включить шифрование, «ssl»

    $mail-&gt;CharSet = 'UTF-8';
    $mail-&gt;From = $sender;
    $mail-&gt;addAddress($recipient);  // Добавить получателя

    $mail-&gt;Subject = 'Вот тема';
    $mail-&gt;Body    = 'Это текст сообщения HTML &lt;b&gt;выделен жирным шрифтом!&lt;/b&gt;';
    if(!$mail-&gt;send()) {
        echo 'Сообщение не может быть отправлено.';
        echo 'Ошибка почтовой программы: ' . $mail-&gt;ErrorInfo;
    } else {
        echo 'Сообщение отправлено';
    }
}</code></pre>
Похожие вопросы