DKIM Support v1

master
ifiguero 2022-07-16 00:00:13 -04:00
parent b363e7f791
commit 59c2434bf3
3 changed files with 22 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -6,3 +6,4 @@ asyncpg
python-daemon python-daemon
async_dns async_dns
aiosmtplib aiosmtplib
dkimpy