Local email server php

A simple local Windows mail server for testing PHP scripts

Over time I used all sorts of solutions to test the email sending functions of my PHP scripts during development on my local Windows machine. They all had some pros and many cons and kept me searching for a better way of testing.

For quite some time my preferred solution was to point my mailserver settings in php.ini to some external email server. But I had to make sure that the outgoing emails were not send to the real-life recipient addresses (jamming my customers email inboxes during my development). So this required script changes to make sure the scripts would recognize the local development system and send emails only to special testing addresses while on that system.

Meanwhile I found a better solution that does not require any changes to the scripts that I am testing. I now use a very small and simple freeware email server running on my Windows development machine. In my php.ini I set up localhost as the standard SMTP server to send emails to. The effect is that all emails sent from my local PHP scripts are transmitted to my little local email server, from where they can be polled locally with any email client program. Relaying is switched off in this server, so the emails can never reach the outside world.

Here are some step by step instructions to reproduce my solution:

Читайте также:  Тип опасности 110 php file in upload dir

PHP setup

Set the PHP SMTP server address to localhost, so PHP does not send out of your local environment. I also prefer to set the SMTP port to something other than 25 to hide the local SMTP port from any outside access:

SMTP = localhost smtp_port = 10025

Mail server

I use “ArGoSoft Mail Server .NET Freeware”. Although this freeware version is quite limited in its functionality, it is ideal for our purposes.

Go get it from ArGoSoft’s website, install and start it.
[UPDATE 20111123] Unfortunately the software is not available on the ArGoSoft website anymore. But you can easily find it on the web (search for “MailServerFreeSetup.msi”). Here is a working source:
argosoft-mail-server.soft-ware.net
Download, install and start it.
[UPDATE 20121114] After multiple users reported viruses in the download file, I re-visited and found that the above source had tampered with the original file and started to spread an infected version. Please use this source instead (thanks to mrbellek for the hint!). And please make sure that the file is of type .msi (not .exe) and that the file size is below 700kb. Please be careful!

Download, install and start it.

[UPDATE 20120813] When the server is up and running you can open the mail server console window from the Windows tray at the right (or bottom) end of the task bar. Look out for this icon: . As the mail server is a simple Windows service, the software does not appear in the list of installed programs under the Windows Start button.

From the console window choose the Options tool and set the SMTP port to the same value that you used in php.ini – you probably want to do the same with the POP3 port:

SMTP Port: 10025 POP3 Port: 10110

Activate “Load Server at Windows Startup” and “Start Automatically when Launched”. Without the second option the mailserver software will be run but the process listening on the mail port will not be started. Leave all other input fields and checkboxes in the Options dialog empty and unchecked. In particular do not allow Relaying, and do not activate SMTP Authentication (if you don’t want to make your life more complicated than necessary).

From the console window choose the “Users and Domains” tool and add all domains and all users that you expect your PHP scripts to send emails to. The ArGoSoft Freeware Mailserver does not distinguish between several domains that you define, so for each user you create all domains will be active:

Example Domains: digilog.de, digilog.info, digilog.biz Users: myself

This setup will accept incoming emails to…

…and all emails will go into the same email account that can be polled by accessing localhost with login data myself and the password that you defined for that user.

Now to poll your emails in your favorite email client, you simply set up a new email account retrieving mail from localhost with the above user data and the special ports that we defined above.

The nice thing about this solution is that the limitations of the freeware version actually turn into an advantage for us. Whatever email addresses your scripts will try to send to, simply set them up in ArGoSoft’s domain and user section and any emails will be intercepted and collected in just a few central accounts. When you later push your scripts to the live server, they will work without any changes and will really send out their emails into the world.

Dieser Beitrag wurde unter Configuration, Email, PHP, Windows abgelegt und mit Debugging, Mail server, Scripts verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Источник

Почтовый сервер на собственном сайте через sendmail

Не так давно передо мной встала задача предоставить зарегистрированным в моих каталогах, промышленной, автомобильной и риэлторской тематики, организация личный почтовый ящик с именем моего домена. Вместо того, чтобы выдавать пользователям каталога непосредственные контактные данные, было определено, что более продуктивно будет выдавать им контактные данные с названием моего домена. Что должно увеличить посещаемость, как среди пользователей, так и среди самих организаций.

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

К сожалению, как только я начал обращаться с данным вопросом на крупнейших форумах рунета, то получил не совсем тот ответ, который я ожидал. При этом, лучшие из предложений сводились к тому, чтобы снести прекрасно работающий sendmail и установить на него Postfix и Dovecot, которые тянули и другие зависимости. А установочный пакет выглядел бы примерно так: exim4, exim4-base, exim4-config, exim4-daemon-heavy, dovecot-common, dovecot-imapd, dovecot-pop3d, php5-imap. В худшем оговаривали баснословные суммы, аж в 2000$, или советовали пройти мимо и не позориться.

К сожалению, позориться долго не пришлось. Так как однозначной инструкции, которая бы удовлетворяла мои нужды, и другие возможные подобные решения в сети не нашлись, я решил, что данное руководство будет как нельзя кстати.

Поставленная мною задача решалась с помощью старого доброго sendmail и небольших настройках в его конфигурациях.

В первую очередь необходимо прописать настройки в dns-зоне:

@ IN AAAA 2001:0db8:85a3:0000:0000:8a2e:0370:7334 

Указанный в ДНС MX адрес также надо будет прописать в /etc/hosts, добавив:

Теперь перейдем непосредтственно к конфиругации sendmail.

Начнем с файла /etc/mail/sendmail.mc. Для начала откроем двери для всех желающих, так как по умолчанию smtp-порт открыт только на раздачу. Проблему вирусов, спама и дос-атак обсудим позже. Делается это так:

DAEMON_OPTIONS(`Port=smtp,Addr=, Name=MTA-ext')dnl 

Добавим таблицы виртуальных пользователей и доменов:

FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')dnl 

Теперь создадим файл, куда будем класть почту:

touch "/home/site.ru/public_html/mail" 

И назначим ему права владельца а группу sendmail агента:

chown user:mail /home/site.ru/public_html/mail 

Путь и название файла условное и рекомендуется создавать файл вне зоны доступа для случайных пользователей.

В файле /etc/aliases пропишем имя виртуального пользователя, которому и будут приходить сообщения.

user: /home/site.ru/public_html/mail 

В этом случае вся почта будет скапливаться в файле /home/site.ru/public_html/mail

Большой файл разобрать сложно, да и неудобно обращаться к нему отдельно от самого sendmail. Поэтому наиболее удобный вариант направить сразу на php скрипт, который будет его обрабатывать на лету.

user: "|php5-cgi -c /path/to/php.ini /site.ru/public_html/mail.php" 

Чтобы письма всех возможных пользователей отправлялись в файл /site.ru/public_html/mail.php

Запишем в файл /etc/mail/virtusertable инструкцию:

Данная инструкция сообщает, что всех возможных пользователей сайта site.ru мы определяем как пользователя user, для которого ранее мы уже определили место для хранение почты. В дальнейшем нам лишь останется разобрать, кому и чья почта принадлежит и отдать уже фактическому владельцу на нашем сайте.

Завершающим этапом останется лишь прописать список имен хостов, принимаемых программой sendmail в файле
/etc/mail/local-host-names.

mx.site.ru site.ru (В конце пробел обязателен) 

Активируем изменения командой sendmailconfig.

Защита от DDoS-атак

Для защиты от дос-атак я приведу несколько настроек, которые будут полезны. Их необходимо прописать в файле /etc/mail/sendmail.mc:

# максимальное число соединений в секунду. Если частота превышена, дополнительные соединения будут поставлены в очередь (не отброшены). Define(confCONNECTION_RATE_THROTTLE',43')dnl #максимальное число дочерних процессов sendmail. Если это число будет превышено, дополнительные соединения будут поставлены в очередь (не отброшены). Define(confMAX_DAEMON_CHILDREN',40')dnl #если на диске осталось указанное количество блоков, сервер больше не будет принимать сообщения. По умолчанию - 100. Define(4configSIN_FREE_BLOCKS',100')dnl #максимальный размер заголовка входящего сообщения, в байтах. Define(confMAX HEADERS LENGTH', 4024')dnl #максимальный размер тела входящего сообщения. Значение по умолчанию равно 4 Мб (4 194 302 байта). Не нужно устанавливать слишком маленькое значение, так как оно может быть легко превышено вложениями (attachments). Define(confMAX_MESSAGE_SIZE',4194304')dnl 

После чего еще раз активируем изменения командой sendmailconfig.

Антиспам и антивирус

В качестве антивирусной программы будем использовать Dr.Web. Он же поможет нам справиться и со спамом. Я не стал использовать дополнительные спам-фильтры, так как сам после долгих страданий от того, что в сервисе gmail.com нужные мне письма постоянно попадали в спам. Принял решение перейти на yandex. Поэтому чистку спамом считаю делом индивидуальным, а использование каких-либо спам-листов и фильтров довольно сомнительным удовольствием.

wget -O - http://officeshield.drweb.com/drweb/drweb.key | apt-key add 
nano /etc/apt/sources.list deb http://officeshield.drweb.com/drweb/debian stable non-free 
aptitude install drweb-sendmail-av-as 

Основной файл настройки антиспама /etc/drweb/plugin_vaderetro.conf. В нем нас особо интересуют черные и белые списки:

WhiteList = /home/site.ru/public_html/mail/WhiteList BlackList = /home/site.ru/public_html/mail/BlackList 

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

На этом все. В следующей публикации мы разберем сохраненную форму и создадим для нее таблицу в базе данных, привязав ее к пользователю сайта или каталога.

Источник

Оцените статью