четверг, 20 марта 2014 г.

Конфигурация postfix, написанная после прочтения книжки (не помню уже названия) о нём

Postfix configuraton, writed after postfix admin book.

master.cf:
strict_rfc821_envelopes = yes
strict_mime_encoding_domain = no
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_banner = $myhostname
smtpd_error_sleep_time = 1s
smtpd_soft_error_limit = 5
smtpd_hard_error_limit = 10
smtpd_recipient_restrictions =
       reject_non_fqdn_sender
       reject_non_fqdn_recipient
       reject_unknown_sender_domain
       reject_unknown_recipient_domain
       permit_mynetworks
       permit_sasl_authenticated
       reject_unauth_destination
       reject_non_fqdn_helo_hostname
       reject_invalid_helo_hostname
       check_helo_access pcre:/etc/postfix/helo_checks
       check_sender_mx_access cidr:/etc/postfix/bogus_mx
       reject_unknown_helo_hostname
       reject_rbl_client bl.spamcop.net
       reject_rbl_client sbl.spamhaus.org=127.0.0.2
       reject_rbl_client cbl.abuseat.org=127.0.0.2
       reject_rbl_client dnsbl.sorbs.net
       reject_rbl_client dnsbl.njabl.org
       check_policy_service inet:127.0.0.1:60000
       permit

smtpd_data_restrictions =
       reject_multi_recipient_bounce

smtpd_client_restrictions =
       permit_mynetworks
       check_client_access hash:/etc/postfix/sender_checks
       permit

content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings



helo_checks:
/^ns2\.parmatel\.ru$/   550 Don't use my hostname!
/^mail\.parmatel\.ru$/  550 Don't use my hostname!
/^194\.8\.68\.3$/       550 Don't use my IP-address!
/^\[194\.8\.68\.3\]$/   550 Don't use my IP-address!
/^[0-9.]+$/             550 Use hostname, not IP address!
/^CO-VRT-021\.elfnet\.local$/   OK
/^preved\.aup\.komienergo\.ru$/ OK
/^srv-sbs\.evrokniga\.ru$/      OK

несколько океев - чтобы принимать почту с криво настроенных почтовиков -
обратная зона у которых указывает на адрес, разресолвить который не удается

bogus_mx: тут всё стандартно
#bogus networks
0.0.0.0/8       550 Mail server in broadcast network!
10.0.0.0/8      550 RFC1918 private network, no route!
172.16.0.0/12   550 RFC1918 private network, no route!
192.168.0.0/16  550 RFC1918 private network, no route!
127.0.0.0/8     550 Mail server in loopback network!


sender_checks:
89.111.164:     401 Network 89.11.164 rejected!
когда-то вылезла спамерская подсетка - закрыл всю.

суббота, 8 марта 2014 г.

Отправка писем из python 3.3.4 через gmail

Привожу скрипт для отправки писем из python через smtp.google.com.
Необходима авторизация, как настроить описано тут. После настройки дадут пароль, который надо прописать в скрипт.
Скрипт использует файл. Кодировка содержимого файла utf-8. В первых 5 строках файла содержится, собственно, письмо. В последующих - csv данные с адресом, комментарием и именем получателя.
Кодировка файла скрипта тоже utf-8.

# coding=utf-8

#логин на сервер осуществляется для каждого письма, потому что, 
#видимо, нельзя отправить больше 10 писем за одно подключение.

import smtplib
from email.mime.text import MIMEText
from datetime import date
from email.header import Header

from_addr = 'kutchin@gmail.com'
username = from_addr
password = 'kmtwvsotmwolxjgl'

with open('C:/Python33/_progz/emails.csv', 'r', encoding='UTF8') as f:
hello_text = f.readline().strip()
text1 = f.readline().strip()
text2 = f.readline().strip()
text3 = f.readline().strip()
text4 = f.readline().strip()
for ln in f:
email, undef, name  = ln.strip().split(',')
#тут заменяем адрес электронной почты на свой на всякий случай
email = from_addr
text = "{0} {1}!\n{2}\n{3}\n{4}\n\n{5}".format(hello_text, name, text1, text2, text3, text4)
print (email, text)
msg = MIMEText(text)
msg['Subject'] = Header('запрос информации по продукту', 'utf-8').encode()
msg['To'] = email
msg['From'] = from_addr
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(username, password)
server.sendmail(from_addr, email, msg.as_string())
server.quit

Ярлыки