寻求测试SMTP服务器的工具:排查Fedora上Java应用发信缓慢问题
批量测试邮件发送的实用方案
我来给你几个实用的方案,帮你快速生成20-30封测试邮件,同时也给你一些排查Java应用邮件发送慢的建议:
方法1:用sendmail命令批量发送(最简单直接)
Fedora上的Postfix默认提供sendmail兼容命令,用它写个shell循环就能快速批量发邮件,而且邮件会直接进入Postfix队列,和正常应用提交的方式一致,很适合测试队列性能。
创建一个shell脚本(比如test_emails.sh):
#!/bin/bash # 替换成你的收件邮箱 RECIPIENT="your-email@example.com" # 发件人可以自定义,确保Postfix允许这个发件人 SENDER="test-sender@your-domain.com" for i in {1..30}; do # 构造邮件内容 cat <<EOF | sendmail -f "$SENDER" -t To: $RECIPIENT Subject: Test Email #$i - $(date +%H:%M:%S) This is test email number $i, sent at $(date) EOF echo "Sent test email #$i" # 可选:如果需要模拟真实场景的间隔,取消下面的注释 # sleep 0.2 done
给脚本加执行权限:chmod +x test_emails.sh,然后运行它就行。
方法2:用curl调用SMTP服务(适合测试远程Postfix)
如果Java应用是连接远程的Postfix服务器,用curl直接发SMTP请求是个不错的选择,不需要依赖额外工具。
同样写个shell脚本:
#!/bin/bash # 替换成你的Postfix服务器地址和端口(默认25,加密的话用465/587) SMTP_SERVER="your-postfix-ip:25" FROM="test-sender@your-domain.com" TO="your-email@example.com" for i in {1..30}; do curl --url "smtp://$SMTP_SERVER" \ --mail-from "$FROM" \ --mail-rcpt "$TO" \ --upload-file - <<EOF From: $FROM To: $TO Subject: Curl Test Email #$i This is a test email sent via curl, number $i EOF echo "Sent curl test email #$i" done
如果Postfix需要认证,加--user "username:password"参数;如果用SSL加密(465端口),把smtp://改成smtps://;如果用STARTTLS(587端口),加--ssl-reqd参数。
方法3:用Python脚本(更灵活,适合复杂测试)
如果需要更灵活的控制(比如并发发送、添加附件、自定义邮件格式),用Python的smtplib写个脚本很方便,而且几乎所有Fedora系统都自带Python3。
创建test_emails.py:
import smtplib from email.mime.text import MIMEText from datetime import datetime # 配置参数 SMTP_SERVER = 'your-postfix-ip' SMTP_PORT = 25 FROM_EMAIL = 'test-sender@your-domain.com' TO_EMAIL = 'your-email@example.com' NUM_EMAILS = 30 for i in range(1, NUM_EMAILS + 1): # 构造邮件 subject = f"Python Test Email #{i} - {datetime.now().strftime('%H:%M:%S')}" body = f"This is test email number {i}\nSent at: {datetime.now()}" msg = MIMEText(body) msg['From'] = FROM_EMAIL msg['To'] = TO_EMAIL msg['Subject'] = subject # 发送邮件 with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: # 如果需要STARTTLS,取消下面的注释 # server.starttls() # 如果需要认证,取消下面的注释并替换用户名密码 # server.login('smtp-username', 'smtp-password') server.send_message(msg) print(f"Sent Python test email #{i}")
运行脚本:python3 test_emails.py
额外排查建议(针对Java应用邮件慢的问题)
你提到怀疑Java应用没用到Postfix队列,建议做这些检查:
- 查看Java应用的SMTP配置:确认是不是指向了Postfix服务器的25/587端口,有没有开启
mail.smtp.sendpartial等参数,避免因为单个收件人失败导致整体阻塞 - 检查Postfix日志:查看
/var/log/maillog,搜索Java应用服务器的IP或者发件人邮箱,看邮件是不是真的进入了Postfix队列,有没有被拒绝或者延迟的记录 - 查看Postfix队列状态:运行
postqueue -p,看有没有积压的邮件,或者用postcat -q <队列ID>查看具体邮件的状态 - 测试Java应用的SMTP连接:在Java应用服务器上用
telnet your-postfix-ip 25手动发一封邮件,看是不是慢,排除网络问题
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

