Можно ли отправить электронную почту с помощью PHP-скрипта и HTML-формы с помощью localhost? [Дубликат]

Вот версия Swift 4:

static func loadFileAsync(url: URL, completion: @escaping (String?, Error?) -> Void)
{
    let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!

    let destinationUrl = documentsUrl.appendingPathComponent(url.lastPathComponent)

    if FileManager().fileExists(atPath: destinationUrl.path)
    {
        completion(destinationUrl.path, nil)
    }
    else
    {
        let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, delegateQueue: nil)
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        let task = session.dataTask(with: request, completionHandler:
        {
            data, response, error in
            if error == nil
            {
                if let response = response as? HTTPURLResponse
                {
                    if response.statusCode == 200
                    {
                        if let data = data
                        {
                            if let _ = try? data.write(to: destinationUrl, options: Data.WritingOptions.atomic)
                            {
                                completion(destinationUrl.path, error)
                            }
                            else
                            {
                                completion(destinationUrl.path, error)
                            }
                        }
                        else
                        {
                            completion(destinationUrl.path, error)
                        }
                    }
                }
            }
            else
            {
                completion(destinationUrl.path, error)
            }
        })
        task.resume()
    }
}
202
задан Raptor 12 April 2013 в 08:21
поделиться

9 ответов

Вы должны настроить SMTP на своем сервере. Вы можете бесплатно использовать G Suite SMTP 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 здесь .

15
ответ дан Hristiyan Dodov 22 August 2018 в 22:47
поделиться
  • 1
    Ответ @Vikas был лучшим, но учтите, что использование стандартного ssl на smtp_port может не работать в определенном состоянии, используя 465, поскольку этот ответ заявил, что он действительно исправил его для меня – Temitayo 28 October 2014 в 08:38
  • 2
    @Temitayo вы попробовали мой ответ? – Thirumalai murugan 28 October 2014 в 09:51
  • 3
    Используемый ответ @Vikas, но я использовал фрагмент из вашего, то есть используя 465 как smtp_port. Хорошая работа в любом случае – Temitayo 1 November 2014 в 23:35
  • 4
    Неустранимая ошибка: Класс «PHPMailer» не найден в C: \ xampp \ htdocs \ myweb \ email_script.php в строке 82 – Shafizadeh 13 February 2016 в 17:17
  • 5
    вам нужно скачать phpmailer github.com/Synchro/PHPMailer – Thirumalai murugan 16 February 2016 в 07:10

Для людей в окнах 8, если вы хотите это сделать, я бы действительно рекомендовал прочитать этот учебник, который я нашел: http://yogeshchaugule.com/blog/2013/configure-sendmail-wamp

Не написано мной, но после того, как я ударил головой в бетонную стену в течение 2,5 часов, не получив этого, чтобы работать с такими странными ошибками, как:

  • Время ожидания соединения.
  • Соединение закрыто. Изящно.

Наконец-то я нашел, что учебник был посвящен установке https://www.stunnel.org/downloads.html и конфигурация Stunnel. Наконец он работал.

5
ответ дан N.Schipper 22 August 2018 в 22:47
поделиться
  • 1
    У меня была такая же проблема (Connection Closed Gracefully), и я смог ее исправить, установив stunnel, выполнив следующие шаги: digiex.net/guides-reviews/guides-tutorials/application-guides/… с очень небольшим изменением, мне пришлось прокомментировать параметры output, debug и socket из stunnel.conf, поскольку они выдавали ошибку. Upvoted. – Special K. 23 June 2014 в 19:46

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

32
ответ дан Paul Trotter 22 August 2018 в 22:47
поделиться
  • 1
    И если это не работает, проверьте c:\xampp\php\php.ini, найдите [mail function] и раскомментируйте строку, в которой упоминается mailtodisk.exe. Остальные строки в этом разделе закомментированы, за исключением mail.add_x_header. – Tim Malone 10 May 2016 в 05:33
  • 2
    В качестве дополнения к моему комментарию выше для более поздних версий XAMPP вам может потребоваться вручную добавить строку mailtodisk. Он должен выглядеть примерно так: sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe" – Tim Malone 16 November 2016 в 22:46
  • 3
    Дополнительное добавление к комментарию от @TimMalone. Я обнаружил, что почта будет записана только в XAMPP / mailoutput, если вы используете XAMPP в качестве администратора – sohail 10 April 2018 в 16:02
  • 4
    @sohail: вам не нужно запускать XAMPP в качестве администратора, но вы должны дать разрешение всем пользователям писать в папку XAMPP / mailoutput (щелкните правой кнопкой мыши по папке & gt; безопасность & gt; все пользователи & gt; права доступа & gt; полный доступ ) – cheppsn 31 July 2018 в 14:06

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

, вы должны использовать 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 для получения большего урока Piseth Sok

Cheer!

10
ответ дан Piseth Sok 22 August 2018 в 22:47
поделиться

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

0
ответ дан user3065579 22 August 2018 в 22:47
поделиться

Вы можете отправлять почту с 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 для localhost.

в файле 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 с функцией почты и отправьте почту с localhost.

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

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

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

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

309
ответ дан Vikas Dwivedi 22 August 2018 в 22:47
поделиться
  • 1
    кроме вышеперечисленных конфигураций, мне нужно было обновить мой sendmail glob.com.au/sendmail – kaz 19 September 2013 в 07:10
  • 2
    Я должен был перейти с XAMMP 1.7.7 на 2.8.2.3 - sendmail включен в новый XAMPP. Я попробовал использовать более новый sendmail с 1.7.7 несколько месяцев назад и не смог заставить его работать - наконец, убрал пулю и использовал новый XAMPP, и он работает так, как описано. – VanAlbert 4 January 2014 в 00:00
  • 3
    Я считаю, что местоположение C: \ xampp \ php \ php.ini относится к средам Windows. Для mac посмотрите в xamppfiles / etc для вашего файла php.ini. – Paul Trotter 14 October 2014 в 11:46
  • 4
    Ответ @Vikas был лучшим, но учтите, что использование стандартного ssl на smtp_port может не работать в определенном состоянии, используя 465, поскольку ответ Thirumalai murugan заявил, что он действительно исправил его для меня – Temitayo 28 October 2014 в 08:38
  • 5
    Это только для gmail? благодаря.. – pcs 23 May 2015 в 04:09

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

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

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

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

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

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

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

20
ответ дан Vikas Khunteta 22 August 2018 в 22:47
поделиться
  • 1
    Если вы не доверяете этому сайту, вместо этого вы можете использовать papercut из codeplex: papercut.codeplex.com . – Marcel Burkhard 30 March 2015 в 09:00
  • 2
    Мне не нужно было ничего делать, чтобы он работал, просто установите его. – vonUbisch 8 July 2015 в 08:08

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

Это полезная ссылка относительно этого .

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

0
ответ дан Vishnu Renku 22 August 2018 в 22:47
поделиться
  • 1
    Вы можете запретить скайп использовать порт 80. его настройки подключения к скайпу – astroanu 27 January 2015 в 04:54
0
ответ дан Jignesh Rawal 5 November 2018 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: