Вывод функции php mail () в локальный файл вместо использования SMTP - PullRequest
0 голосов
/ 02 февраля 2011

Я хотел бы создать альтернативный файл sendmail.php, в котором вместо необходимости проходить через сервер вызов php mail () добавляется к локальному файлу, чтобы мы могли убедиться, что сделан вызов mail (). и что он идет на соответствующие адреса электронной почты.

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

Этот сайт: http://www.drupal4hu.com/node/55makes я думаю, что это не должно быть сложно, но я думаю, что они запускали скрипт с живого сервера, и он выдает ошибки, когда я пробую его на своей локальной машине. Наиболее частая ошибка:

dyld: Symbol not found: __cg_jpeg_resync_to_restart

не кажется уместным - возможно, это вызвано какой-то другой неясной проблемой.

Я поиграл с редактированием файла php.ini, и я знаю, что могу направить все через SMTP-сервер, но я бы не стал рисковать, когда кто-то (включая меня) отправлял электронные письма в реал люди, пока мы тестируем.

Есть идеи? Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 февраля 2011

Если у вас есть куча прямых звонков на встроенный mail(), вы, к сожалению, в плохом месте. Лучшее решение, вероятно, состоит в том, чтобы создать некоторую оболочку и быстро заменить все пустые вызовы mail () на вызовы вашей оболочки.

Если это как-то невозможно, вы можете настроить почтовую конфигурацию так, чтобы она использовала фальшивый sendmail, созданный вами самим, который просто записывает данные на диск. Вы бы просто установили mail.sendmail_path на свой fake-sendmail, и этот fake-sendmail сделал свое дело.

Но лучший ответ - создать API для отправки почты в вашем приложении, убедиться, что оно всегда используется, и оттуда отключиться. Затем, когда вы хотите отказаться от mail () для чего-то вроде SwiftMailer или Zend_Mail , вам нужно всего лишь изменить реализацию специфичной для вашего приложения функции send_some_email ().

0 голосов
/ 11 ноября 2016

Я использовал простой скрипт для передачи входных данных sendmail в файл:

# php.ini
sendmail_path = "c:\xampp-php7\sendmail.bat"

И реальный скрипт ( Гист )

@echo off

::kam budeme ukládat e-maily?
SET mailpath=c:\temp\mail\

if not exist %mailpath% mkdir %mailpath%

::sestavíme název souboru
echo %date:~0,11%
SET filename=%date:~11,4%-%date:~7,2%-%date:~3,2%_%hours%-%time:~3,2%-%time:~6,2%_%time:~9,2%

::zajistíme unikátnost souboru
:random
SET file="%mailpath%%filename%--%RANDOM%.mhtml"
IF EXIST %file% goto :random

::e-mail uložíme do souboru
more %1 > %file%

echo "%file%" > c:\temp\list

::otevřeme adresář s e-maily Průzkumníkem
start %mailpath%

::a nebo přímo otevřeme e-mail
:: start %file%

echo "mail sent"
0 голосов
/ 02 февраля 2011

Вместо того, чтобы использовать функцию PHP mail при разработке / тестировании, вы должны просто сделать так, чтобы ваша система зарегистрировала журнал, и вы можете проверить свои журналы, чтобы убедиться, что это происходит.

Также рассмотрите возможность использования чего-то другого, кроме sendmail. Библиотеки SMTP в PHP есть везде, включая те, которые поддерживают полный SSL и т. Д. (Например, Gmail).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...