이중 SMTP 전달 설정
동일한 사용자 계정으로 여러 이메일 서버를 관리하는 것은 어려울 수 있습니다. 이 시나리오에서는 이메일이 example.com의 사용자에게 전송되면 james와 winmail 서버 모두에서 이를 수신해야 이메일 내용이 변경되지 않도록 해야 합니다.
DNS에서 여러 MX 레코드를 구성하는 것과 같은 일반적인 솔루션은 example.com을 한 번에 하나의 서버에만 연결할 수 있기 때문에 부족합니다. Postfix를 사용하여 로컬 저장소 없이 두 서버 모두에 이메일을 전달하는 것은 복잡한 것으로 입증되었으며 smtplib를 사용한 스크립팅과 같은 솔루션은 신뢰할 수 없을 수 있습니다. 더 나은 대안을 살펴보겠습니다.
명령 | 설명 |
---|---|
import smtplib | Python을 사용하여 이메일을 보내기 위해 Simple Mail Transfer Protocol 라이브러리를 가져옵니다. |
import sys | 명령줄 인수를 가져오는 데 사용되는 시스템별 매개변수 및 함수 모듈을 가져옵니다. |
from email.mime.text import MIMEText | MIMEText 클래스를 가져와 텍스트 기반 전자 메일 메시지를 만듭니다. |
from email.mime.multipart import MIMEMultipart | MIMEMultipart 클래스를 가져와 멀티파트 이메일 메시지를 생성합니다. |
msg.attach(MIMEText('text', 'plain')) | 이메일 메시지에 일반 텍스트 본문을 첨부합니다. |
with smtplib.SMTP(server) as smtp | SMTP 서버에 대한 연결을 열고 이메일을 보낸 후 서버가 제대로 닫혔는지 확인합니다. |
postmap /etc/postfix/transport | 메일 라우팅을 위해 Postfix에서 사용되는 전송 맵 파일에서 바이너리 데이터베이스를 생성합니다. |
systemctl reload postfix | 서비스를 중지하지 않고 Postfix 구성을 다시 로드하여 변경 사항을 적용합니다. |
Postfix와 Python 통합 이해
제공된 스크립트는 이메일을 두 개의 SMTP 서버로 전달하여 두 서버가 동일한 이메일을 받도록 설계되었습니다. 파이썬 스크립트, , 을 사용합니다 이메일 전송을 처리하는 라이브러리. 수입한다 보낸 사람 및 받는 사람과 같은 명령줄 인수를 가져옵니다. 스크립트는 다음을 사용하여 이메일을 구성합니다. 삼 그리고 이메일 본문을 생성하고 첨부합니다. 그런 다음 SMTP 서버 목록을 반복하고 다음을 사용하여 각 서버에 이메일을 보냅니다. .
Postfix 측에서 구성에는 사용자 정의 전송 서비스를 정의하는 파일, , Python 스크립트를 사용합니다. 그만큼 파일은 다음에 지정된 전송 맵을 포함하도록 업데이트됩니다. /etc/postfix/transport. 명령 전송 맵에서 바이너리 데이터베이스를 생성하고 Postfix 서비스를 중지하지 않고 구성 변경 사항을 적용합니다. 이 설정을 사용하면 example.com으로 전송된 모든 이메일이 Python 스크립트에 의해 처리되어 두 SMTP 서버로 전달됩니다.
Python을 사용하여 여러 SMTP 서버로 이메일 전달
Python을 사용하여 SMTP 전달 처리
# multi_forward.py
import smtplib
import sys
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
sender = sys.argv[1]
recipient = sys.argv[2]
def forward_email(sender, recipient):
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = recipient
msg['Subject'] = 'Forwarded email'
msg.attach(MIMEText('This is the body of the email', 'plain'))
# SMTP servers
smtp_servers = ['james.example.com', 'winmail.example.com']
for server in smtp_servers:
with smtplib.SMTP(server) as smtp:
smtp.sendmail(sender, recipient, msg.as_string())
if __name__ == '__main__':
forward_email(sender, recipient)
Python 스크립트를 사용하도록 Postfix 구성
사용자 정의 메일 전달을 위한 Postfix 구성
# /etc/postfix/master.cf
multi_forward unix - n n - - pipe
flags=Rhu user=nobody argv=/usr/local/bin/multi_forward.py ${sender} ${recipient}
# /etc/postfix/main.cf
transport_maps = hash:/etc/postfix/transport
# /etc/postfix/transport
example.com multi_forward:
# Update transport map
postmap /etc/postfix/transport
# Reload Postfix
systemctl reload postfix
추가 도구를 사용하여 Postfix 기능 향상
이메일을 여러 SMTP 서버로 전달하는 또 다른 접근 방식은 추가 Postfix 도구 및 구성을 사용하는 것입니다. 그러한 도구 중 하나가 Postfix입니다. , 보낸 사람의 주소에 따라 다른 릴레이 호스트를 지정할 수 있습니다. 이 기능은 일반적으로 다양한 릴레이 호스트를 통해 보내는 메일을 라우팅하는 데 사용되지만 일부 창의적인 구성을 통해 사용 사례에 맞게 조정할 수 있습니다. 예를 들어 다음의 조합은 그리고 이메일을 복제하여 다른 주소로 전달한 다음 해당 서버로 라우팅하는 데 사용할 수 있습니다.
또한 Postfix를 다음과 같은 메일 필터와 통합합니다. 또는 이메일 처리 및 라우팅에 더 많은 유연성을 제공할 수 있습니다. 이러한 필터는 이메일이 Postfix를 통과할 때 처리할 수 있으므로 사용자 정의 스크립트나 규칙을 사용하여 메시지를 여러 대상으로 복제하고 전달할 수 있습니다. 이 설정은 간단한 Python 스크립트를 사용하는 것보다 더 복잡할 수 있지만 강력한 이메일 처리 기능이 필요한 환경에 더 큰 안정성과 확장성을 제공할 수 있습니다.
- DNS에서 여러 MX 레코드를 구성하려면 어떻게 해야 합니까?
- 안타깝게도 DNS MX 레코드는 우선 순위 수준당 하나의 서버에 대한 매핑만 지원하므로 이 접근 방식은 여러 서버에 동시에 전달하는 데는 작동하지 않습니다.
- 의 목적은 무엇입니까? 지령?
- 그만큼 Postfix의 지시문은 이메일 주소 또는 도메인을 특정 메일 전송 방법 및 대상에 매핑하도록 지정합니다.
- 할 수 있다 이 시나리오에서 도움이 될까요?
- 예, 보낸 사람의 주소를 기반으로 다양한 릴레이 호스트를 통해 이메일을 라우팅할 수 있지만 여러 서버로 전달하려면 창의적으로 조정해야 합니다.
- 어떻게 Postfix에서 일하시나요?
- 그만큼 지시문을 사용하면 Postfix가 이메일 주소를 다른 주소에 매핑하여 이메일 전달 및 리디렉션을 활성화할 수 있습니다.
- 역할은 무엇입니까? ?
- 그만큼 지시문을 사용하면 Postfix가 자동으로 BCC 수신자를 수신 이메일에 추가할 수 있어 메시지를 복제하는 데 유용합니다.
- 사용해도 되나요 이메일 전달을 위해 Postfix를 사용하시나요?
- 예, Postfix와 통합되어 사용자 정의 필터링 및 전달 규칙을 적용하여 이메일 처리에 대한 더 많은 제어를 제공할 수 있습니다.
- 이것은 사용되는 파일은 무엇입니까?
- 그만큼 Postfix의 파일은 사용자 정의 전송 서비스를 포함하여 메일 배달 프로세스와 구성을 정의합니다.
- 어떻게 업데이트하나요? 데이터 베이스?
- 사용 전송 맵 파일에서 바이너리 데이터베이스를 생성하거나 업데이트하는 명령입니다.
- Postfix를 다시 로드하는 것이 왜 중요한가요?
- 다음을 사용하여 Postfix 다시 로드 서비스를 중단하지 않고 구성 변경 사항을 적용하여 원활한 운영을 보장합니다.
- 무엇인가요 Python에서 사용됩니까?
- 그만큼 Python의 라이브러리는 SMTP를 통해 이메일을 보내는 데 사용되므로 스크립트가 이메일 전송을 프로그래밍 방식으로 처리할 수 있습니다.
메시지를 여러 SMTP 서버로 전달하도록 Postfix를 설정하려면 사용자 정의 스크립트와 세부 Postfix 구성을 조합해야 합니다. DNS 또는 간단한 Python 스크립트를 사용한 초기 시도는 필요한 안정성을 제공하지 못할 수 있지만 Amavisd-new 또는 Procmail과 같은 고급 Postfix 기능 및 도구를 통합하면 보다 강력한 솔루션을 제공할 수 있습니다. 전송 맵, 가상 별칭 맵 및 수신자 BCC 맵을 주의 깊게 구성하면 james 및 winmail 서버 모두에 원활하고 효율적인 메시지 전달을 보장할 수 있습니다. 이 접근 방식을 통해 이메일 인프라는 탄력성을 유지하고 복잡한 라우팅 요구 사항을 처리할 수 있습니다.