DKIM Support v1
parent
b363e7f791
commit
59c2434bf3
|
@ -32,6 +32,7 @@ services:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
- DEBUG=False
|
- DEBUG=False
|
||||||
|
- DKIM_PRIVKEY=myPricKey.pem
|
||||||
- DNS_RELAY=192.168.0.1
|
- DNS_RELAY=192.168.0.1
|
||||||
# - DNS_RELAY=200.1.21.80
|
# - DNS_RELAY=200.1.21.80
|
||||||
- SQLALCHEMY_DATABASE_URI=postgresql+asyncpg://docker:docker@db/docker
|
- SQLALCHEMY_DATABASE_URI=postgresql+asyncpg://docker:docker@db/docker
|
||||||
|
|
|
@ -6,6 +6,9 @@ import sys
|
||||||
import os
|
import os
|
||||||
import aiosmtplib
|
import aiosmtplib
|
||||||
import traceback
|
import traceback
|
||||||
|
import dkim
|
||||||
|
from email.parser import Parser
|
||||||
|
from email.policy import default
|
||||||
from aiosmtpd.controller import Controller
|
from aiosmtpd.controller import Controller
|
||||||
from sqlalchemy.future import select
|
from sqlalchemy.future import select
|
||||||
from .model import db, update_mx, update_a, FQDN, MXRecord, ARecord, IPV4Addr, Direccion, Destinatario, Carta
|
from .model import db, update_mx, update_a, FQDN, MXRecord, ARecord, IPV4Addr, Direccion, Destinatario, Carta
|
||||||
|
@ -17,6 +20,7 @@ from .resolver import updateDNS
|
||||||
|
|
||||||
smtprelayport = '10025'
|
smtprelayport = '10025'
|
||||||
bindip = '0.0.0.0'
|
bindip = '0.0.0.0'
|
||||||
|
dkimKey = None
|
||||||
|
|
||||||
# cacerts = '/etc/ssl/certs/ca-certificates.crt'
|
# cacerts = '/etc/ssl/certs/ca-certificates.crt'
|
||||||
# keyfile = '/var/run/secrets/keyfile'
|
# keyfile = '/var/run/secrets/keyfile'
|
||||||
|
@ -27,6 +31,12 @@ if not os.environ.get('SMTP_HOSTNAME'):
|
||||||
else:
|
else:
|
||||||
banner_hostname = os.environ.get('SMTP_HOSTNAME')
|
banner_hostname = os.environ.get('SMTP_HOSTNAME')
|
||||||
|
|
||||||
|
if os.environ.get('DKIM_PRIVKEY'):
|
||||||
|
try:
|
||||||
|
dkimKey = open(os.environ.get('DKIM_PRIVKEY'), 'r').read()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
async def enviarCorreosDominio(dominioid):
|
async def enviarCorreosDominio(dominioid):
|
||||||
valido = int(time.time())
|
valido = int(time.time())
|
||||||
|
@ -117,7 +127,16 @@ async def enviarCorreosDominio(dominioid):
|
||||||
|
|
||||||
await log.info("Carta Rte '{}' => Destinatarios '{}' ".format(remitente.direccion, ', '.join(rcpt_to)))
|
await log.info("Carta Rte '{}' => Destinatarios '{}' ".format(remitente.direccion, ', '.join(rcpt_to)))
|
||||||
try:
|
try:
|
||||||
await smtp.sendmail(remitente.direccion, rcpt_to, carta.contenido.encode('utf-8'))
|
|
||||||
|
if dkimKey is not None:
|
||||||
|
mail2send = Parser(policy=default).parsestr(carta.contenido)
|
||||||
|
mail2send['DKIM-Signature'] = dkim.sign(carta.contenido, b'mayordomo', b'ilab.cl', dkimKey, include_headers=[b'from', b'to', b'subject', b'message-id']).decode()[len("DKIM-Signature: "):]
|
||||||
|
|
||||||
|
await smtp.sendmail(remitente.direccion, rcpt_to, mail2send.encode('utf-8'))
|
||||||
|
|
||||||
|
else:
|
||||||
|
await smtp.sendmail(remitente.direccion, rcpt_to, carta.contenido.encode('utf-8'))
|
||||||
|
|
||||||
for destinatario in rdest.scalars():
|
for destinatario in rdest.scalars():
|
||||||
destinatario.enviado = 1
|
destinatario.enviado = 1
|
||||||
|
|
||||||
|
|
|
@ -6,3 +6,4 @@ asyncpg
|
||||||
python-daemon
|
python-daemon
|
||||||
async_dns
|
async_dns
|
||||||
aiosmtplib
|
aiosmtplib
|
||||||
|
dkimpy
|
Loading…
Reference in New Issue