mirosas
Нужно отправить почтовое сообщение из php скрипта одним из слудущих вариантов (а для любознательности всеми тремя) без длинных 3rd party классов:
1) через SSL IMAP — казалось бы самое логичное.
imap_open — окей.
imap_mail — очень странная функция, странная тем, что не использует resourse полученный от imap_open, и не видать в ней поддержки SSL2) SSL SMTP
3) напрямую соединившись с почтовым сервером получателя (по протоколу коннекта почтовых серверов между собой).
В почтовом сообщении предполагается передать ip адрес сервера, и более ничего.
mirosas
Неприятно, что PHP по мере обновления версий не обновляет функции под современные реалии, в частности ни с mail.ru, ни c gmail.com. ни даже с yandex.ru мне не удалось отправить письмо используя стандартные php функции, такие как mail.
MouseZver
https://github.com/PHPMailer/PHPMailer
mirosas
А без громоздкого 3rd party software, разобраться в внутренностях которого я вряд ли смогу, как-то возможно?
Пока что сделал передачу IP адреса через создание папки в почтовом ящике и её переименовании. Но как-то по нормальному хочется, и не тягая в простейшее приложение тонны кода.
miketomlin
Ф-ция mail отправляет через ту прогу, которую укажешь в качестве «отправщика». Укажешь какой-нить почтовый клиент, способный принимать контент через «перенаправление ввода-вывода» и данные доступа, например, через строку параметров, отправишь через любой сторонний почтовый сервис.
— Добавлено —
Но обычно этой ф-цией отправляют с локального почтового сервера. А кто не в состоянии настроить сервер, тот обычно не в состоянии настроить и клиент (или у него нет такой возможности, на шареде), поэтому мучает пых отправкой через сторонний сервис.
MouseZver
используй composer или в ручную скачай/установи/подключи
PHP:
<?php use PHPMailerPHPMailerPHPMailer; use PHPMailerPHPMailerException; require ‘path/to/PHPMailer/src/Exception.php’; require ‘path/to/PHPMailer/src/PHPMailer.php’; require ‘path/to/PHPMailer/src/SMTP.php’;используй рычаги управления софта
PHP:
$mail = new PHPMailer(true); try { //Server settings $mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output $mail->isSMTP(); //Send using SMTP $mail->Host = ‘smtp.example.com’; //Set the SMTP server to send through $mail->SMTPAuth = true; //Enable SMTP authentication $mail->Username = ‘user@example.com’; //SMTP username $mail->Password = ‘secret’; //SMTP password $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption $mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS` //Recipients $mail->setFrom(‘from@example.com’, ‘Mailer’); $mail->addAddress(‘joe@example.net’, ‘Joe User’); //Add a recipient $mail->addAddress(‘ellen@example.com’); //Name is optional $mail->addReplyTo(‘info@example.com’, ‘Information’); $mail->addCC(‘cc@example.com’); $mail->addBCC(‘bcc@example.com’); //Attachments $mail->addAttachment(‘/var/tmp/file.tar.gz’); //Add attachments $mail->addAttachment(‘/tmp/image.jpg’, ‘new.jpg’); //Optional name //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’; $mail->send(); echo ‘Message has been sent’; } catch (Exception $e) { echo «Message could not be sent. Mailer Error: {$mail->ErrorInfo}«; }Все остальные проблемы Майлер решает за тебя.
miketomlin
Лучше напрямую, если твой хостер удосужился норм. настроить отправку через mail и ты в курсе, что такое DKIM, SPF и DMARC (особенно если домен хостится не у хостера).
mirosas
У меня свой собственный «хостинг»)), под Win 10 (одна из трех задач, для которых создавался этот сервер, работает только под Win) с отключенными обновлениями)) — там никаких почтовых клиентов или серверов не стоит)). Домена у сервера нету), он немножко другое делает). А IP его мне нужен, чтобы при поездках я мог к нему подключиться через RDP.
PhpMailer — это что-то около 300 килобайт 3rd party software ))
Что-то не нравится оно мне… Когда я знакомился с PHP впервые, в версии 3.0, то всё было просто.. А сейчас, такое ощущение, что для отправки почты без 3rd party software на сервере самое простое, это изучить smtp протокол, плюс SSL TLC, и на сокетах все сделать. жесть, как будто на C#, а не на php скрипт пишу.
Пожалуй оставлю как уже реализовал — через imap менять имя папки, на то, какое сообщение мне нужно передать (IP адрес домашнего роутера, за которым стоит домашний сервер).
mkramer
Да не, можно и mail-ом, только обычно не хочется самому разбираться с заголовками, кодированием темы и прочим. ПОэтому и используют готовые пакеты.
— Добавлено —
А уж если не через sendmail, которым пользуется mail, а по SMTP — то тем более, возни дофига
mirosas
как-то сомнительно… что если оно не поддерживает SSL и авторизацию по логин-пароль, то через заголовки можно будет это сделать.
не люблю я эту современную моду.. где вместо 10 строк кода библиотека на 300 килобайт.
Пока что нашел библиотеку на 5 килобайт, завтра буду пробовать. 5 килобайт я хотя бы прочитать могу. Судя по коду работает на сокетах с обработкой smtp комманд. Чем-то напоминает код, который я давно-давно на java делал, и решил, что php в одну строку мне больше нравится, на чем изучение java остановил. А тут на те… от чего ушел, к тому и вернулся…)) https://vk-book.ru/otpravka-pisem-cherez-smtp-s-avtorizaciej-po-protokolu-ssl-na-php/
mkramer
Ну я думаю мало кто отчитывает весь свой vendor.
Ну а так, когда в одну строку, всю эту работу делает утилита sendmail на никсах, которую скрыто дёргает PHP. Винда у меня только на десктопе, поэтому как там не знаю.
MouseZver
1,8 кб, моя победить
mkramer
Конечно не будет. Как уже сказано, функция mail предельно проста — дёргает внешнюю утилиту и всё.
mirosas
))). Сам PHPMailer около 300кб весит)
— Добавлено —Хм… я тут вычитал, через некоторое место вроде как можно настроить виндовый сендмеил передавать логин-пароль и работать с ssl. Завтра проверю. В теории должно получиться 4 строчки. Первые три ini_set.
MouseZver
сам интепретатор php8 basic весит 118Мб
зачем тебе пхп? все можно решить обычным powershell
miketomlin
О какой прямой отправке тогда идет речь? Прямая отправка не пройдет проверку PTR.
miketomlin
Это, наверное, ф-ция для обычной отправки. Чтобы добавить сообщение в «свой» ящик, в IMAP используется команда APPEND. И есть ф-ция imap_append
mirosas
)). в 4 строчки не вышло..
118мб интерпретатор это как около гига браузер))
imap_append, пробовал уже, чтобы поместить в Outbox, но что-то пошло не так.. да ладно, просто папку переименовываю и всё.На будущее понял, что будут проблемы и скорее всего придется использовать длинный 3rd party class, на текущее просто папку переименовывает и ок.
Всем спасибо.
miketomlin
Это реальный изврат. Посмотрите описание ф-ции. Там должен быть какой-нить простой пример
mirosas
Я сам офигеваю от того, какой это изврат, но работает, и нормальных путей решения я не вижу (ну кроме толстенных, или не очень, 3rd party classes, или можно самому на сокетах написать, через команды smtp или imap).
imap_append писать в Inbox так то тоже израт, пускай и меньший.
На самом деле получилось даже лучше, чем я хотел — так-то я думал у меню будет гора писем, а так, просто папочка переименовывается)
Похожие записи:
- Как и куда добавить условие IF в моем коде?
- Безопасное программирование сокетов с OpenSSL и C
- Почему после настройки новой сети соединение с моим сервером minecraft (через nginx) было потеряно, в то время как все другие службы, обслуживаемые nginx, работают нормально?
- Реализация нравится / не нравится
- Чем PHPMailer отличается от обычной mail() функций??