За последние 24 часа нас посетили 22462 программиста и 1188 роботов. Сейчас ищут 736 программистов ...

Как отправить письмо с вложением

Тема в разделе "PHP для новичков", создана пользователем izumov, 8 сен 2019.

  1. izumov

    izumov Новичок

    С нами с:
    25 апр 2019
    Сообщения:
    35
    Симпатии:
    1
    Мой код
    require_once 'PHPMailer/PHPMailerAutoload.php';
    $mail = new PHPMailer;
    $Mailer = 'sendmail';
    $mail->setFrom('pnk66@mail.ru', 'First Last');
    $mail->addAddress('nikolaypaziy@gmail.com');
    $mail->Subject = 'PHPMailer file sender';
    $mail->msgHTML("My message body");
    // Attach uploaded files
    $mail->addAttachment($filename);
    //$mail->addAttachment($filename2);
    $r = $mail->send();
    не отправляет сообщение .А выдается ошибка Could not instantiate mail function.PHP и WEb сервер развернуты на локальной машине.Почтовых серверов на компе нет. Как добиться отправки сообщения?
     
  2. kazadai90

    kazadai90 Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    103
    Симпатии:
    19
    Сам по себе данный класс не отправляет почту. Он использует программу-почтовик, установленный на компьютере, с которого будет идти отправка. В вашем случае такой программы нет. Поэтому вам лучше использовать SMTP отправку
    Код (Text):
    1. $Mailer = 'sendmail';
    Код (Text):
    1. //$Mailer = 'sendmail';
    2. $Mailer = 'SMTP';
    и конечно же указать параметры от SMTP соединения

    Посмотреть примеры кода можно тут https://github.com/PHPMailer/PHPMailer
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    @kazadai90, вроде эта либа может отправлять напрямую или я ошибаюсь?
     
  4. kazadai90

    kazadai90 Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    103
    Симпатии:
    19
    Что значит напрямую? если SMTP то идет соединение по 465 или другому порту к серверу-почтовику, если sendmail - то идет вызов данной программы в ОС
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Не через «программу-почтовик».
     
  6. kazadai90

    kazadai90 Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    103
    Симпатии:
    19
    насколько я знаю - нет, напрямую не отправляет
    --- Добавлено ---
    The PHP mail() function usually sends via a local mail server, typically fronted by a sendmail binary on Linux, BSD and OS X platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP implementation allows email sending on Windows platforms without a local mail server.

    Это из github, раздел Why you might need it
     
    miketomlin нравится это.
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Ну значит я был прав. Нужно только подкрутить.
    --- Добавлено ---
    ТСу: только лучше не используйте такой режим настройки на продакшине, отправляйте через «почтовик» (сервер или даже клиент).
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Наверняка пых можно состыковать и с каким-нить клиентом (ищи такие, которые имеют продвинутый интерфейс командной строки) и отправлять через удаленный почтовый ящик/сервер.
     
  9. FoxCloud

    FoxCloud Активный пользователь

    С нами с:
    20 июн 2017
    Сообщения:
    172
    Симпатии:
    2
    Сам по себе php (или какая-либо библиотека php) не способен отправлять письма.
    Первый и самый простой с виду способ отправки писем - это функция mail(), но для того, чтоб она работала, необходимо иметь в наличии работающий mail-сервер и отредактировать php.ini следующим образом:

    Код (Text):
    1. [mail function]
    2. SMTP = localhost
    3. smtp_port = 25
    4. sendmail_from = me@example.com
    5. sendmail_path = "php.exe C:\sendmail.php --dir C:\mail --open"
    6. ; в случае линукса возможна следующая строка
    7. ; sendmail_path = /usr/sbin/sendmail -t -i -F"Full Name" -f'emailaddress@example.com'
    Но зачастую хостинг-компании не предоставляют возможность настраивать подобным образом php.ini, либо вообще отключают функцию mail(),
    поэтому дефакто стандартом является использование сторонних (или собственных mail-серверов) и отправка письма с помощью SMTP.

    В качестве примера будем использовать популярный PHPMailer (версия 6.0.1) и mail-сервер от Yandex :

    В каталог помещаем следующие файлы из библиотеки:

    Exception.php
    OAuth.php
    PHPMailer.php
    POP3.php
    SMTP.php

    а также собственный файл send.php с следующим содержанием:

    PHP:
    1. <?php
    2.  
    3. ini_set("display_errors", 1);
    4.  
    5. include dirname(__FILE__)."/PHPMailer.php";
    6. include dirname(__FILE__)."/SMTP.php";
    7. include dirname(__FILE__)."/Exception.php";
    8.  
    9. $mail = new PHPMailer\PHPMailer\PHPMailer;
    10. $mail->isSMTP();
    11. $mail->Host = 'smtp.yandex.ru';
    12. $mail->SMTPAuth = true;
    13. $mail->Username   = "bot@yandex.ru"; // SMTP account username
    14. $mail->Password   = "g87j094876-067";     // SMTP account password
    15. $mail->SMTPSecure = 'ssl';
    16. $mail->Port = 465;
    17.  
    18. $mail->setfrom('bot@yandex.ru', 'Robot');
    19. $mail->isHTML(true);
    20.  
    21. $mail->addaddress('info@yandex.ru', 'Info');
    22.  
    23. $mail->Subject = "mysubject";
    24. $mail->Body    = "mybody";
    25.  
    26. //Отправка сообщения
    27. if(!$mail->send()) {
    28.     echo 'Ошибка при отправке. Ошибка: ' . $mail->ErrorInfo;
    29. } else {
    30.     echo 'Сообщение успешно отправлено';
    31. }
     
    #9 FoxCloud, 9 сен 2019
    Последнее редактирование: 9 сен 2019
  10. FoxCloud

    FoxCloud Активный пользователь

    С нами с:
    20 июн 2017
    Сообщения:
    172
    Симпатии:
    2
    Даже если выразиться точнее, то де-факто стандартом является явное подключение из php к сторонним mail-серверам (или опять-таки собственным mail-серверам) и отправка письма с помощью SMTP.
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Приведите хотя бы один пример такого хостера, вместо того чтобы пересказывать байки. Только фришный хостинг сюда не приплетайте.

    Это стандарт для школоты. Серьезные товарищи используют отдельный локальный «почтовик» (способы доставки при этом могут сильно варьироваться).
     
  12. FoxCloud

    FoxCloud Активный пользователь

    С нами с:
    20 июн 2017
    Сообщения:
    172
    Симпатии:
    2
    1) Я указал общую глобальную тенденцию. Не вижу смысла заниматься рекламой или антирекламой конкретных хостеров.
    2) Серьезные товарищи все и так знают, за советами не обращаются. Потому в данном случае советуем максимально простые вещи.
     
  13. izumov

    izumov Новичок

    С нами с:
    25 апр 2019
    Сообщения:
    35
    Симпатии:
    1
    И тем не менее серьезные или не серьезные товарищи помогли решить задачу и это главное. Благодарю за подсказки.