Очередная проблема. Великий и могучий Outlook Express не видит вложения, отправленные старшим собратом – Outlook 2007. Т.е. письмо большого размера, но виден только текст этого письма. Любой другой клиент, открывающий такие письма, их видит, но любимый мой OE в этот раз сплоховал. Проблема заключается в том, что Outlook по своей прихоти отправляет вложения в формате TNEF, который не сильно понимает ОЕ. Кручение галочек и прочей мутотени не помогло, так что оставалось только бубен
Также частенько от клиентов снаружи приходили вложения WINMAIL.DAT, которые являются отражением той же проблемы. Когда уже надоело ручками перекодировать письма, чтобы достать вложение, , в дебрях интернета был найден некий ytnef_smtpd. И счастию не было предела ![]()
Из ридми:
This script provides a SMTP proxy that performs extraction of TNEF attachments and re-attaching them as normal ones.
По-русски говоря – он представляет из себя SMTP прокси и перекодирует вложения в нормальный формат.
Приступим
Ставим собственно сам конвертер:
1 2 | cd /usr/ports/converters/ytnef make && make install |
И Питон:
1 2 | cd /usr/ports/lang/python make && make install |
Качаем скрипт по ссылке выше и располагаем здесь:
/usr/local/etc/mail/ytnef_smtpd.py
создаем скрипт автозапуска /usr/local/etc/rc.d/ytnef_smtpd.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #!/bin/sh case "$1" in start) if [ -f /var/run/ytnef_smtpd.pid ] then echo "Script already launched. PID: "\ `cat /var/run/ytnef_smtpd.pid` else echo "Starting ytnef smtpd..." daemon -f -p /var/run/ytnef_smtpd.pid \ /usr/local/etc/mail/ytnef_smtpd.py && echo "...Done!" fi ;; stop) if [ -f /var/run/ytnef_smtpd.pid ] then echo "Shutting down ytnef smtpd..." kill -TERM `cat /var/run/ytnef_smtpd.pid` && \ rm -f /var/run/ytnef_smtpd.pid && echo "...Done!" else echo "ytnef smtpd not launched." fi ;; *) echo "Use start script for: { start | stop }" >&2 exit 64 ;; esac |
Даем права:
1 2 | chmod 755 /usr/local/etc/mail/ytnef_smtpd.py chmod 755 /usr/local/etc/rc.d/ytnef_smtpd.sh |
Правим сам /usr/local/etc/mail/ytnef_smtpd.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # Address to listen on LISTEN_ADDR = 'localhost' # Port to listen on LISTEN_PORT = 10027 # Remote address to forward messages to REMOTE_ADDR = 'localhost' # Remote port to forward messages to REMOTE_PORT = 10028 # Location of ytnef binary YTNEF_BIN = '/usr/local/bin/ytnef' # Location of 'file' binary. Set this to '' to disable. FILE_BIN = '/usr/bin/file' # Logfile for errors. Set this to '' to disable. LOG_FILE = '/var/log/ytnef_smtpd.log' # String returned to SMTP client when the filter fails for some reason FILTER_FAIL = '451 tnef filter failed' |
Прикручиваем фильтр к постфиксу (если больше нет других SMTP прокси):
/usr/local/etc/postfix/main.cf:
1 | content_filter = scan:127.0.0.1:10027 |
/usr/local/etc/postfix/master.cf:
1 2 3 4 5 6 7 8 9 10 | .... 127.0.0.1:10028 inet n - n - 16 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o smtpd_authorized_xforward_hosts=127.0.0.0/8 |
Т.е. постфикс после получения кидает письмо на порт 10027 на ytnef фильтр и тот выдает его ему назад в цепкие лапы на 10028 порт.
Далее ребутаем-запускаем:
1 2 | /usr/local/etc/rc.d/ytnef_smtpd.sh start /usr/local/etc/rc.d/postfix restart |
и радуемся проходящим вложениям
Спасибо за заметку, тоже столкнулся с такой проблемой, вы мне очень помогли. Переписал вашу заметку применительно к Debian Lenny:
Всегда рад помочь! И спасибо за ссылку