邮件服务器postfix的安装和简单的使用

本文只介绍postfix最基本的安装和调用Java代码来发送邮件的功能。

 

1. 安装postfix

在Ubuntu服务器上安装:

sudo apt-get update

sudo apt-get install postfix -y

安装过程中会让你选择一种Postfix配置类型。一般情况下,我们需要选择第二种类型:Internet Site。

No configuration 表示不要做任何配置;
Internet Site 表示直接使用本地SMTP服务器发送和接收邮件;
Internet with smarthost 表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,而是使用第三方smart host来转发邮件;
Satellite system 表示邮件的发送和接收都是由第三方smarthost来完成。
Local only 表示邮件只能在本机用户之间发送和接收。

在第二个页面System mail name中填入你的域名,也就是邮箱地址@符号后面的域名,比如,我的邮箱地址是gnu@linuxdashen.com,所以我填的是linuxdashen.com。当发件人的域名地址没有指定时,Postfix会自动将这个域名添加到发件人的地址中。

 

2,发送测试邮件

echo "test email" | sendmail your-account@gmail.com

3,使用mail客户端来发送邮件

安装邮箱客户端

sudo apt-get install mailutils

发送命令:

mail username@gmail.com

输入抄送人、标题、正文
 

user@mail:~$ mail username@gmail.com
Cc: 
Subject: 2nd test email
I'm sending this email using the mail program.

输入主题和正文后,按Ctrl+D来发送邮件。

4,使用Java代码来调用postfix发邮件

下载jar包:javax.mail.jar

http://mvnrepository.com/artifact/com.sun.mail/javax.mail/1.5.6 

代码如下:

public class EmailPush {
	public static Properties props;
	public static AtomicInteger a = new AtomicInteger(0);
	
	static {
		System.setProperty("mail.mime.splitlongparameters", "false");
		props = new Properties();
		props.put("mail.smtp.host", "192.168.10.13");
		props.put("mail.smtp.port", "25");
		props.put("mail.smtp.auth", "false");
	}
	
	public  static void sendMail(int tenantid, String mailMsg,String to,String subject){
        Session session = Session.getDefaultInstance(props);
        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("info@zhuyun-it.com"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subject);
            message.setText(mailMsg);
            
            Transport.send(message);
            System.out.println("发送完毕");
        } catch (AddressException e) {
        	e.printStackTrace();
        } catch (MessagingException e) {
        	e.printStackTrace();
        }
 
    }

/**
	 * 发送带附件的邮件
	 * @param tenantid	
	 * @param mailMsg			邮件正文
	 * @param to				收件人
	 * @param subject			邮件标题
	 * @param bfile				附件的内容(byte[]格式)
	 * @param fileName			附件的名称	例如: 1.zip
	 * @param suffix			附件的后缀	例如: zip
	 */
	public  static void sendMail(int tenantid, String mailMsg,String to,String subject, byte[] bfile, String fileName, String suffix){
		String uuid = UUID.randomUUID().toString() + "." + suffix;
		File file = getFile(bfile, "email-file", uuid);
        
        Session session = Session.getDefaultInstance(props);
        try {
            Message message = new MimeMessage(session);
            
            // 6. 创建文本"节点"
            MimeBodyPart text = new MimeBodyPart();
            // 这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
            text.setText(mailMsg);
//            text.setContent(mailMsg, "text/plain;charset=UTF-8");
            
	          // 创建附件"节点"
	          MimeBodyPart attachment = new MimeBodyPart();
	          // 读取本地文件
	          DataHandler dh2 = new DataHandler(new FileDataSource(file));
	          // 将附件数据添加到"节点"
	          attachment.setDataHandler(dh2);
	          // 设置附件的文件名(需要编码)
			  attachment.setFileName(MimeUtility.encodeText(fileName));
	           
	          MimeMultipart mm = new MimeMultipart();
	          mm.addBodyPart(text);
	          mm.addBodyPart(attachment);     // 如果有多个附件,可以创建多个多次添加
	          mm.setSubType("mixed");         // 混合关系
	   
	          // 11. 设置整个邮件的关系(将最终的混合"节点"作为邮件的内容添加到邮件对象)"text/html;charset=UTF-8"
	          message.setContent(mm);
            
            message.setFrom(new InternetAddress("info@zhuyun-it.com"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subject);
//            message.setText(mailMsg);
            Transport.send(message);
            System.out.println("发送完毕");
            
            //删除本地文件
	          if (file.exists()) {
				file.delete();
			}
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
        	e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
        	e.printStackTrace();
		}  
 
        
    }
	
	/** 
     * 根据byte数组,生成文件 
     */  
    public static File getFile(byte[] bfile, String filePath,String fileName) {  
        BufferedOutputStream bos = null;  
        FileOutputStream fos = null;  
        File file = null;  
        try {  
            File dir = new File(filePath);  
            if(!dir.exists()&&dir.isDirectory()){//判断文件目录是否存在  
                dir.mkdirs();  
            }  
            file = new File(filePath+"\\"+fileName);  
            fos = new FileOutputStream(file);  
            bos = new BufferedOutputStream(fos);  
            bos.write(bfile);  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            if (bos != null) {  
                try {  
                    bos.close();  
                } catch (IOException e1) {  
                    e1.printStackTrace();  
                }  
            }  
            if (fos != null) {  
                try {  
                    fos.close();  
                } catch (IOException e1) {  
                    e1.printStackTrace();  
                }  
            }  
        }
		return file;  
    }
	
	
    public static void main(String[] args){
    	
//    	sendMail(1, "this is one for you!", "wer131231@126.com", "tips", Util.getBytes("src/卷帘门2_monthly_record_Jul_2018.zip"), "卷帘门2_monthly_record_Jul_2018.zip", "zip");
    	sendMail(1, "rrr", "wer131231@126.com", "RRR");
	}
}

重载了sendMail方法,一个是普通的文本邮件,另一个是带有附件的邮件。

运行后,报出以下错误:

javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
	com.sun.mail.smtp.SMTPAddressFailedException: 454 4.7.1 <wer131231@126.com>: Relay access denied

	at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1950)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1195)
	at javax.mail.Transport.send0(Transport.java:254)
	at javax.mail.Transport.send(Transport.java:124)
	at com.zhuyun.email.EmailPush.sendMail(EmailPush.java:52)
	at com.zhuyun.email.EmailPush.main(EmailPush.java:187)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 454 4.7.1 <wer131231@126.com>: Relay access denied

	at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1850)
	... 5 more

解决方案:

vim /etc/postfix/main.cf

将mynetworks改成0.0.0.0/0, 再重启postfix

service postfix restart

再运行代码,就可以发送邮件成功了。

 

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
安装和配置Postfix邮件服务器,您可以按照以下步骤进行操作: 1. 安装Postfix: 在Linux系统中,使用适当的包管理器(如apt、yum或dnf)安装Postfix。例如,在Ubuntu上,可以使用以下命令进行安装: ``` sudo apt-get update sudo apt-get install postfix ``` 2. 配置主机名和域名: 在配置Postfix之前,确保正确设置了主机名和域名。打开`/etc/hostname`文件,将主机名设置为您的服务器主机名。然后,打开`/etc/hosts`文件,并为您的服务器IP地址和主机名添加条目。 3. 配置PostfixPostfix的主要配置文件是`/etc/postfix/main.cf`。在此文件中,您可以设置Postfix的各种参数,例如域名、邮件存储位置、发送和接收限制等。根据您的需求,可以根据注释进行相应的修改。 4. 配置域名解析: 确保您的域名解析设置正确。您需要为您的邮件服务器设置MX记录,以便其他邮件服务器能够正确路由邮件到您的服务器。 5. 重新加载和启动Postfix: 在完成配置后,重新加载Postfix以应用更改。使用以下命令重新加载Postfix配置: ``` sudo systemctl reload postfix ``` 然后,启动Postfix服务: ``` sudo systemctl start postfix ``` 6. 测试邮件服务器使用邮件客户端或命令行工具(如mail命令)发送测试邮件,确保您的Postfix服务器能够正常发送和接收邮件。 请注意,这只是一个简单的概述,您可能需要根据您的具体环境和需求进行更详细的配置。建议参考Postfix的官方文档或其他相关资源以获取更多详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值