Как настроить XAMPP для отправки почты с локального хоста?

256

Я пытаюсь отправить почту с локального хоста. но я не могу отправить почту с localhost, поэтому кто-нибудь может сказать мне, как перенастроить мой xampp для отправки почты с localhost

Фарид Шейх
источник
3
Можем ли мы увидеть ваш код?
aizaz
2
Невозможно помочь, если вы не предоставите нам текущую конфигурацию.
arkascha
1
Это все еще актуально с включенным Меркурием (ApacheFriends XAMPP 1.8.2)? Я думаю, что да, но если есть люди, предпочитающие ртуть, пожалуйста, укажите ниже. :) Спасибо!
Ледяной воды
Возможная копия sendmail.exe открывается при отправке почты
Паскаль

Ответы:

372

Вы можете отправлять почту с localhost с помощью пакета sendmail, пакет sendmail встроен в XAMPP. Так что, если вы используете XAMPP, вы можете легко отправлять почту с localhost.

Например, вы можете настроить C:\xampp\php\php.iniи c:\xampp\sendmail\sendmail.iniдля Gmail отправлять почту.

в C:\xampp\php\php.iniпоискеextension=php_openssl.dll и удалите точку с запятой с начала этой линии , чтобы сделать SSL работает Gmail для локального хоста.

в файле php.ini найти [mail function]и изменить

SMTP=smtp.gmail.com
smtp_port=587
sendmail_from = my-gmail-id@gmail.com
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

Теперь открыто C:\xampp\sendmail\sendmail.ini. Замените весь существующий код в sendmail.ini следующим кодом

[sendmail]

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=my-gmail-id@gmail.com
auth_password=my-gmail-password
force_sender=my-gmail-id@gmail.com

Теперь вы сделали !! создайте php файл с функцией mail и отправляйте почту с localhost.

PS: не забудьте заменить my-gmail-id и my-gmail-password в приведенном выше коде. Также не забудьте удалить дубликаты ключей, если вы скопировали настройки сверху. Например, прокомментируйте следующую строку, если есть другой sendmail_path : sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"в файле php.ini

Также не забудьте перезапустить сервер с помощью панели управления XAMMP, чтобы изменения вступили в силу.

Для получения почты Gmail проверьте https://support.google.com/accounts/answer/6010255, чтобы разрешить доступ из менее безопасных приложений.

Чтобы отправить электронную почту в Linux (с пакетом sendmail) через Gmail с локального хоста, установите флажок PHP + Ubuntu Отправлять электронную почту с помощью формы gmail localhost .

Викас Двиведи
источник
3
кроме конфигов выше, мне нужно было обновить мой sendmail glob.com.au/sendmail
kaz
1
Мне пришлось обновить XAMMP 1.7.7 до 2.8.2.3 - sendmail включен в более новый XAMPP. Я попытался использовать более новый sendmail с 1.7.7 несколько месяцев назад и не смог заставить его работать - наконец-то укусил пулю и использовал новый XAMPP, и он работает, как описано.
VanAlbert
2
Я считаю, что расположение C: \ xampp \ php \ php.ini относится к средам Windows. Для Mac посмотрите в файле xamppfiles / etc файл php.ini.
Пол Троттер
3
Ответ @Vikas был лучшим, но, пожалуйста, обратите внимание, что использование ssl по умолчанию на smtp_port может не работать в определенных условиях, если использовать 465, так как ответ Тирумалай Муруган заявил, что это действительно исправило меня
Temitayo
2
Он отлично работает с XAMPP версии 7.0.15. Только не забудьте удалить точку с запятой, а также войдите в систему с тем же идентификатором Gmail, который вы настроили, а затем перейдите по ссылке ниже myaccount.google.com/lesssecureapps?pli=1 и Разрешить менее безопасные приложения: ВКЛ. Теперь вы можете отправлять почту прямо с локального
хоста
35

В XAMPP v3.2.1 для целей тестирования вы можете видеть электронные письма, которые XAMPP отправляет в XAMPP / mailoutput. В моем случае на Windows 8 это не требовало дополнительной настройки и было простым решением для проверки электронной почты.

Пол Троттер
источник
1
И если это не работает, проверьте c:\xampp\php\php.ini, найдите [mail function]и раскомментируйте указанную строку mailtodisk.exe. Оставьте все остальные строки в этом разделе закомментированными, кроме mail.add_x_headerодной.
Тим Мэлоун
3
Как дополнение к моему комментарию выше, для более свежих версий XAMPP вам может понадобиться вручную добавить строку mailtodisk. Это должно выглядеть примерно так:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
Тим Мэлоун
Дополнительное дополнение к комментарию от @TimMalone. Я обнаружил, что почта будет записываться в XAMPP / mailoutput только при запуске XAMPP от имени администратора
sohail
@sohail: Вам не нужно запускать XAMPP от имени администратора, но вы должны дать разрешение всем пользователям писать в папку XAMPP / mailoutput (щелкните правой кнопкой мыши папку> security> все пользователи> разрешения на редактирование> полный доступ)
cheppsn
@TimMalone Я применил оба предложения, но ничего в каталоге mailoutput даже после стольких попыток
Vipul Hadiya
25

Очень просто отправлять электронную почту на локальный или локальный сервер

Примечание. Я использую тестовый почтовый сервер на 64-битной Windows 7 с установленным Xampp.

Просто загрузить инструмент сервер тест почты и установить в соответствии с инструкцией , заданной на своем веб - сайте Test Mail Server Tool

Теперь вам нужно изменить только две строки в php.iniфайле

  1. Найти [mail function]и удалить точку с запятой, которая раньше;smtp = localhost
  2. Поставить точку с запятой перед sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

Вам не нужно ничего менять, но если вы все еще не получаете электронную почту, кроме проверки SMTP port, номер порта должен быть таким же.

Вышеуказанный метод предназначен для настроек по умолчанию, предоставляемых программным обеспечением Xampp.

Викас Хунтета
источник
7
Если вы не доверяете этому сайту, вы можете вместо этого использовать papercut из codeplex: papercut.codeplex.com .
Марсель Буркхард
Мне не нужно было ничего делать, чтобы это работало, просто установите его.
vonUbisch
Я просто должен был изменить порт, хотя
Пабло SG Pacheco
Что такое имя пользователя и пароль в этом случае?
Йон
@ Имя пользователя и пароль чего?
Викас Хунтета
23

Вы можете проверить отправку почты на свой компьютер без интернета

Вы должны использовать Papercut это простое приложение для проверки отправки почты. и вам не нужно ничего настраивать.

Просто запустите его и попробуйте проверить отправку почты:

test_sendmail.php

<?php
$to = "somebody@example.com";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: webmaster@example.com" . "\r\n" .
"CC: somebodyelse@example.com";

mail($to,$subject,$txt,$headers);
?>

и вы увидите это:

введите описание изображения здесь

Я надеюсь, что у вас будет хороший день. Вы можете найти меня на Youtube для более учебника Писет Сок

Не унывайте!

Писет Сок
источник
1
Это действительно отличное решение, быстро и просто, и я могу сразу приступить к работе. Локальная работа с почтовыми серверами - это хлопотно, когда это только для разработчиков.
AdheneManx
1
Спасибо, я тоже использовал это для тестирования своего проекта.
Писет Сок
19

Вы должны настроить SMTP на вашем сервере. Вы можете бесплатно использовать SMTP G Suite от Google:

<?php

$mail = new PHPMailer(true);

// Send mail using Gmail
if($send_using_gmail){
    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->SMTPAuth = true; // enable SMTP authentication
    $mail->SMTPSecure = "ssl"; // sets the prefix to the servier
    $mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server
    $mail->Port = 465; // set the SMTP port for the GMAIL server
    $mail->Username = "your-gmail-account@gmail.com"; // GMAIL username
    $mail->Password = "your-gmail-password"; // GMAIL password
}

// Typical mail data
$mail->AddAddress($email, $name);
$mail->SetFrom($email_from, $name_from);
$mail->Subject = "My Subject";
$mail->Body = "Mail contents";

try{
    $mail->Send();
    echo "Success!";
} catch(Exception $e){
    // Something went bad
    echo "Fail :(";
}

?>

Подробнее о PHPMailer здесь .

Тирумалай Муруган
источник
Ответ @Vikas был лучшим, но, пожалуйста, обратите внимание, что использование ssl по умолчанию для smtp_port может не работать в определенных условиях, используя 465, так как в этом ответе указано, что это действительно исправило меня
Temitayo
Я использовал ответ @Vikas, но я использовал ваш фрагмент, то есть 465 в качестве emtp_port. Хорошая работа в любом случае
Темитайо
Неустранимая ошибка: класс 'PHPMailer' не найден в C: \ xampp \ htdocs \ myweb \ email_script.php в строке 82
Shafizadeh
8

Как и в моем личном опыте, я обнаружил, что ответ, очень похожий на ответ Викаса Двиведи, будет прекрасно работать.

Шаг 1 (файл php.ini)

В файле php.ini находится в xampp\php\php.ini. Измените настройки на следующие:

 extension=php_openssl.dll
 [mail function]
 sendmail_path =":\xampp7\sendmail\sendmail.exe -t"
 mail.add_x_header=On

Отключите другие переменные mail funciton, поставив ;перед ними. например;smtp_port=25

Шаг 2 (файл sendmail.ini)

В sendmail.ini, расположенном в xampp \ sendmail \ semdmail.ini, измените следующее:

 smtp_server=smtp.gmail.com
 smtp_port=465
 smtp_ssl=auto
 auth_username=address@gmail.com
 auth_password=YourPassword

Шаг 3 (код)

Создайте файл php и используйте следующее:

 <?php
    mail($to, "subject", "body", "From: ".$from);
 ?>

уведомление

  • Вам нужно перезапустить apache, чтобы php.ini перезагрузился.
  • вам нужно активировать Google Безопасный доступ к приложениям в https://myaccount.google.com/u/1/security
  • Это может помочь запустить Xampp с правами администратора.
М в
источник
2

Этот код используется для почты с вашего локального хоста XAMPP и вашей учетной записи Gmail. Этот код очень прост и работает для меня, попробуйте сами.

Ниже изменения в файле php.ini

SMTP=smtp.gmail.com 
smtp_port=587 
sendmail_from = your@gmail.com 
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" 
extension=php_openssl.dll 

Ниже изменения в файле sendmail.ini

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log 
auth_username=yourmail@gmail.com 
auth_password=your-gmail-password 
force_sender=yourmail@gmail.com  

Пожалуйста, напишите любимый код в вашем PHP-файле, чтобы отправить письмо

<?php 
    $to = "tomail@gmail.com";
    $subject = "Test Mail";
    $headers = "From: from_mail@gmail.com\r\n";
    $headers .= "Reply-To: replytomail@gmail.com\r\n";
    $headers .= "CC: theassassin.edu@gmail.com\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    $message = '<html><body>';
    $message .= '<img src="//css-tricks.com/examples/WebsiteChangeRequestForm/images/wcrf-header.png" alt="Website Change Request" />';
    $message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
    $message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Email:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Type of Change:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Urgency:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>URL To Change (main):</strong> </td><td>Details</td></tr>";
    $addURLS = 'google.com';
    if (($addURLS) != '') {
        $message .= "<tr><td><strong>URL To Change (additional):</strong> </td><td>" . $addURLS . "</td></tr>";
    }
    $curText = 'dummy text';           
    if (($curText) != '') {
        $message .= "<tr><td><strong>CURRENT Content:</strong> </td><td>" . $curText . "</td></tr>";
    }
    $message .= "<tr><td><strong>NEW Content:</strong> </td><td>New Text</td></tr>";
    $message .= "</table>";
    $message .= "</body></html>";

    if(mail($to,$subject,$message,$headers))
    {
        echo "Mail Send Sucuceed";
    }
    else{
        echo "Mail Send Failed";    
    }
?>
Кишан Соратия
источник
0

Вы должны определить SMTPсервер и порт для этого. Все, кроме как отправка писем с живых хостов.

Это полезная ссылка по этому поводу .

NB. Порт не должен использоваться. Пожалуйста, позаботьтесь о том, чтобы некоторые приложения, такие как, Skypeиспользовали порты по умолчанию и предотвращали отправку почты.

Вишну Р
источник
Вы можете запретить скайпу использовать порт 80. Это в настройках соединения скайпа
astroanu
0

просто потратил больше часа, пытаясь заставить эту работу. для всех, кто испытывает те же проблемы со всеми опубликованными предложениями, которые не работают: вы должны перезапустить Apache в своем интерфейсе XAMPP! просто перезапуск XAMPP не будет работать !!

user3065579
источник
0

Я пробовал много способов отправки почты с локального хоста XAMPP, но, поскольку у XAMPP нет SSL-сертификата, мой почтовый запрос заблокирован Gmail или аналогичными поставщиками SMTP-услуг.

Затем я использовал MailHog для локального сервера smtp, вам нужно просто запустить его. localhost: 1025 для сервера smtp, localhost: 8025 для почтового сервера, где вы можете проверить отправленные вами письма.

вот мой код:

    require_once "src/PHPMailer.php";
    require_once "src/SMTP.php";
    require_once "src/Exception.php";

    $mail = new PHPMailer\PHPMailer\PHPMailer();

      //Server settings
    $mail->SMTPDebug = 3;                      // Enable verbose debug output
    $mail->isSMTP();                                            // Send using SMTP
    $mail->Host       = 'localhost';                    // Set the SMTP server to send through
    $mail->Port       = 1025;                                    // TCP port to connect to
    // $mail->Username   = '';                     // SMTP username
    // $mail->Password   = '';                               // SMTP password
    // $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    // $mail->SMTPSecure = 'tls';         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted

    //Recipients
    $mail->setFrom('testtoo@testto.com', 'Mailer');
    $mail->addAddress('testtoo@webbamail.com', 'Joe User');     // Add a recipient

    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }

Ссылка на репозиторий MailHog Github

uyghurbeg
источник
0

В дополнение ко всем ответам, обратите внимание, что в sendmail.iniфайле:

auth_password = это- не- ваш-Gmail-пароль

Из-за новой проблемы безопасности Google вы должны выполнить следующие шаги, чтобы создать пароль приложения для этой цели:

  1. перейти к https://accounts.google.com/ на вкладке "Безопасность".
  2. включить двухэтапную проверку
  3. вернитесь на вкладку безопасности и создайте пароль для приложения (в раскрывающемся меню выберите приложение выберите «другое»)
Ашкан Насирзаде
источник