sendmail使用中的一些问题

本文详细介绍了Linux环境下邮件系统的安装步骤,并针对可能出现的问题提供了详细的解决方法,包括sendmail重启失败的原因及解决措施、邮件发送缓慢的问题定位、以及sendmail启动/重启时停滞的排查建议。

linux邮件系统安装步骤

基本操作:

1、rpm -ivh sendmail-cf-8.13.1-3.RHEL4.5.i386.rpm
2、 把/etc/mail/sendmail.mc 文件中
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
改成
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
3、 /etc/mail/access中加这一行
user@domain.com              RELAY
(注:要发送到的邮箱,少数服务器需要加,多数服务器不用加就可以发邮件)
4、 /etc/resolv.conf 中加域名解析
nameserver 202.96.134.133
(dns服务器地址)
5、重启服务
service sendmail restart
(sendmail -bp:查看sendmail是否有邮件待发)
mail -s "test message" hehe@hehe.com <mailbody.txt

————————————————————————————————————————————
/var/log/maillog里显示Connection refused by [127.0.0.1]
/etc/mail/local-host-names里面加了主机名没
————————————————————————————————————————————

可能遇到的问题:

1.sendmail重启失败一

    #service sendmail restart
    Shuttingdown sendmail: [  OK  ]
    Shuttingdown sm-client: [FAILED]
    Startingsendmail: 554 5.0.0 No local mailer defined
    554 5.0.0QueueDirectory (Q) option must be set
   [FAILED]
    Startingsm-client: [  OK  ]

[解决方法] http://phorum.study-area.org/index.php?topic=13990.0;prev_next=next

#rpm -qsendmail-cf                         //查看sendmail-cf版本

package sendmail-cf is notinstalled        //表示没有安装sendmail-cf

 

————————————————————————————————————————————

2.sendmail重启失败二

       [root@l-1 greenet_check]# service sendmail restart
       关闭 sendmail:[  确定  ]
       关闭 sm-client:[失败]
       启动 sendmail:makemap: erroropening type hash map access.db: Executable files not allowed
       make: ***[access.db] 错误 73
        确定  ]
       启动 sm-client:/etc/mail/submit.cf: line 545: fileclass: cannot open'/etc/mail/trusted-users': Permission denied
       [失败]

[解决方法]文件权限问题,参考以下两片文章。

第一篇解决了第一个错误,去掉access.db文件的执行权限即可。

但是第二篇稍微有出入,我遇到的错误提示是“Permission denied”,而文中是“World writabledirectory”。参考了其他服务器的配置,将trusted-users文件的权限改为644,解决。

-rw-r--r--  1 rootroot   127 Jun15  2006 trusted-users

http://linux.chinaunix.net/bbs/thread-587977-1-1.html

http://hi.baidu.com/����С��/blog/item/c11d9e3f3ea61cf6838b1302.html(文章失效)

 

3.发邮件非常慢,用mailq命令也半天才显示结果

查看日志/var/log/maillog,会有:

My unqualified host name (********) unknown; sleeping forretry

http://blog.chinaunix.net/u1/42898/showart_335669.html

[解决方法]

vi /etc/hosts

把127.0.0.1   localhost.localdomainlocalhost修改为:

127.0.0.1   hostname localhost.localdomainlocalhost

hostname是主机名

 4、sendmail 启动/重启的时候,到了Startingsendmail这一步就停那儿了。

也是和主机名有关,“估计是sendmail配置有问题,或者是主机名不是网络规范的写法(xx.xx.com),使sendmail验证时间比较常。sendmail是mta,它认的都是网络主机名。你应该是linuxone.china.comor linuxone.cn类似的名字。”

参考贴:http://bbs.chinaunix.net/thread-410586-1-1.html

——————————————————————————————————————————————

跟sendmail相关的几篇文章

保证成功绝对可行的sendmail邮件服务器搭载smtp和pop3认证的详细配置过程

http://www.linuxeden.com/forum/thread-160417-1-1.html

 

Sendmail的安全配置
http://www.docin.com/p-19922070.html

 

鳥哥的 Linux 私房菜 -- Mail Server

http://www.gpes.cy.edu.tw/study/linux/Mail��A��.htm

 

sendmail 配置错误:Cannot open /usr/share/sendmail-cf/m4/cf.m4
http://www.blogjava.net/sealyu/archive/2008/07/23/217028.html

 

Solaris中hostname引起的sendmail错误

 http://www.blogjava.net/sealyu/archive/2008/07/23/217028.html

 

sendmail 队列管理
http://bbs.chinaunix.net/viewthread.php?tid=947152

 

Ping命令不能PING通的种种解惑

http://tieba.baidu.com/f?kz=679294435

 

sendmail错误Connection refused by [127.0.0.1]的解决

http://www.lupaworld.com/28556/viewspace-45209.html

 

用redhat8.0自带的sendmail+sasl配置邮件服务器

http://bbs.chinaunix.net/viewthread.php?tid=14770&highlight=peng
<think>嗯,用户这次的问题是希望了解如何在Java中使用sendMail()方法。从问题描述看,用户需要具体的教程和示例代码。用户可能正在开发一个需要邮件通知功能的应用,比如生日祝福系统或异常报警系统——这从ta引用的资料中提到的"生日发祝福"和"服务器接口状态监控"可以推测出来。翻看之前的引用,发现用户提供了四个参考片段:[^1]展示了一个监听生日发送邮件的ServletContextListener实现,[^2]是Spring框架的自定义事件,[^3]和[^4]则包含邮件认证和监控报警代码。虽然这些片段比较零散,但透露出关键信息:用户可能需要基于事件触发的邮件发送,特别是定时任务场景下的应用。用户真正的痛点可能在:一是如何正确配置邮件服务器连接(特别是安全认证),二是如何封装可复用的邮件发送逻辑。ta特意强调"不是用户真正的需求",说明引用资料可能只是线索,需要跳出片段来组织完整解决方案。考虑到Java邮件发送主要有两种路径:一是直接用javax.mail库,二是用Spring框架的MailSender。用户引用中出现了ServletContextListener和Spring事件,说明可能是Web项目,但没明确是否用Spring。为稳妥起见,应该同时提供基础JavaMail方案和Spring优化方案。关于示例代码,需要注意三个技术点:1.必须示范SSL/TLS连接(引用[^3]提到setSSL)2.需要处理HTML格式邮件(引用[^1]有生日祝福HTML内容需求)3.应该包含异常处理(引用[^4]的监控报警场景需要失败通知)安全方面要提示用户:不能在代码硬编码密码(引用[^3]的示例有密码暴露风险),应该用配置文件或环境变量。另外用户提到的sendMail()方法在javax.mail里实际是Transport.send(),需要明确说明命名差异。最后生成的相关问题要有延续性:定时任务触发(引用[^1]的生日定时)和错误报警(引用[^4])都是用户潜在需求,还应该补充附件发送这种实用功能,毕竟生日祝福可能需要带图片。</think> 在Java中使用`sendMail()`方法发送邮件通常需借助`javax.mail`库。以下是**完整示例代码**及核心步骤解析: --- ### 一、基础配置(以Gmail为例) 1. **启用发件邮箱的SMTP服务** - Gmail需开启"不安全应用访问"或启用**应用专用密码** 2. **添加Maven依赖** ```xml <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> ``` --- ### 二、基础邮件发送代码 ```java import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class MailSender { public static void sendMail(String recipient) throws MessagingException { final String username = "your_email@gmail.com"; // 发件邮箱 final String password = "your_app_password"; // 邮箱密码/应用密码 // 1. 配置SMTP服务器参数 Properties props = new Properties(); props.put("mail.smtp.auth", "true"); // 启用认证 props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密 props.put("mail.smtp.host", "smtp.gmail.com"); // SMTP服务器地址 props.put("mail.smtp.port", "587"); // TLS端口 // 2. 创建会话 Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { // 3. 构建邮件内容 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient)); message.setSubject("邮件测试标题"); // HTML格式内容(支持富文本) String htmlContent = "<h1>Hello!</h1><p>这是一封测试邮件</p>"; message.setContent(htmlContent, "text/html; charset=utf-8"); // 4. 发送邮件 Transport.send(message); // 核心发送方法 System.out.println("邮件发送成功!"); } catch (MessagingException e) { throw new RuntimeException("邮件发送失败: " + e.getMessage()); } } public static void main(String[] args) throws MessagingException { sendMail("recipient@example.com"); // 收件人邮箱 } } ``` --- ### 三、关键技术点说明 1. **安全认证** - Gmail需使用[应用专用密码](https://myaccount.google.com/apppasswords)替代原始密码 - 其他邮箱需开启SMTP服务(如QQ邮箱需开启POP3/SMTP服务) 2. **协议与端口** - **TLS加密**:端口`587`(推荐) - SSL加密:端口`465`(需修改`props.put("mail.smtp.socketFactory.port", "465")`) 3. **邮件内容格式** - 纯文本:`message.setText("纯文本内容")` - HTML格式:`message.setContent(html, "text/html")` - 附件:使用`MimeBodyPart`和`Multipart`组装 --- ### 四、进阶使用场景 1. **定时发送**(结合`TimerTask`) ```java Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { try { sendMail("user@example.com"); } catch (Exception e) { e.printStackTrace(); } } }, new Date(), 24*60*60*1000); // 每天发送一次 ``` 2. **邮件模板引擎**(如Thymeleaf) ```java Context ctx = new Context(); ctx.setVariable("name", "张三"); String html = templateEngine.process("birthday.html", ctx); message.setContent(html, "text/html"); ``` --- ### 五、常见问题解决 | 错误类型 | 解决方案 | |---------------------------|-------------------------------------| | `Authentication failed` | 检查邮箱密码/是否启用SMTP服务 | | `Could not connect to SMTP` | 确认防火墙是否开放587/465端口 | | `No object DCH for MIME type` | 添加`activation.jar`依赖 | > **安全提示**:敏感信息应使用环境变量存储: > ```java > String password = System.getenv("MAIL_PASSWORD"); > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值