1. 程式人生 > >java spring 傳送郵件

java spring 傳送郵件

一  匯入jar

匯入spring-context-support-4.0.5.RELEASE.jar相關jar

二  配置spring配置檔案

這裡可以靈活配置發件郵箱伺服器、發件郵箱埠、發件使用者名稱、密碼

如果系統發件伺服器資訊定死在properties中可以在spring.xml中直接配置

本文采用系統中動態配置發件資訊伺服器

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="defaultEncoding" value="utf-8" />
		<!-- 
		<property name="host" value="${mail.host}" />
		<property name="port" value="${mail.port}" />
		<property name="username" value="${mail.fromAddress}" />
		<property name="password" value="${mail.fromAddressPassword}" /> 
		-->
		<property name="javaMailProperties">
			<props>
				<prop key="mail.smtp.auth">true</prop>
				<!-- <prop key="mail.smtp.timeout">25000</prop>  -->
				<!-- <prop key="mail.smtp.starttls.enable">true</prop> -->
				<prop key="mail.smtp.ssl.enable">true</prop>
				<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
			</props>
		</property>
	</bean>

三  java程式碼實現

採用freemarker 構建郵件的模板

採用spring執行緒池實現非同步傳送

	@Autowired
	private FreeMarkerConfigurer freemarkerConfig;
	@Autowired
	private JavaMailSenderImpl javaMailSender;
	@Autowired
	private TaskExecutor taskExecutor;


	/**
	 * 傳送郵件
	 * 
	 * @param smtpFromMail
	 *            發件人郵箱
	 * @param smtpHost
	 *            SMTP伺服器地址
	 * @param smtpPort
	 *            SMTP伺服器埠
	 * @param smtpUsername
	 *            SMTP使用者名稱
	 * @param smtpPassword
	 *            SMTP密碼
	 * @param toMail
	 *            收件人郵箱
	 * @param subject
	 *            主題
	 * @param templatePath
	 *            模板路徑
	 * @param model
	 *            資料
	 * @param async
	 *            是否非同步
	 */
	public void send(String smtpHost, Integer smtpPort, String smtpUsername, String smtpPassword, String toMail, String subject, String templatePath, Map<String, Object> model, boolean async) {
		Assert.hasText(smtpHost);
		Assert.notNull(smtpPort);
		Assert.hasText(smtpUsername);
		Assert.hasText(smtpPassword);
		Assert.hasText(toMail);
		Assert.hasText(subject);
		Assert.hasText(templatePath);
		try {
			//Setting setting = SettingUtils.get();
			Configuration configuration = freemarkerConfig.getConfiguration();
			Template template = configuration.getTemplate(templatePath);
			String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
			javaMailSender.setHost(smtpHost);
			javaMailSender.setPort(smtpPort);
			javaMailSender.setUsername(smtpUsername);
			javaMailSender.setPassword(smtpPassword);
			MimeMessage mimeMessage = javaMailSender.createMimeMessage();
			MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "utf-8");
			mimeMessageHelper.setFrom(smtpUsername);
			mimeMessageHelper.setSubject(subject);
			mimeMessageHelper.setTo(toMail);
			mimeMessageHelper.setText(text, true);
			if (async) {
				addSendTask(mimeMessage);
			} else {
				javaMailSender.send(mimeMessage);
			}
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}


 	/**
	 * 新增郵件傳送任務
	 * 
	 * @param mimeMessage
	 *            MimeMessage
	 */
	private void addSendTask(final MimeMessage mimeMessage) {
		try {
			taskExecutor.execute(new Runnable() {
				public void run() {
					javaMailSender.send(mimeMessage);
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}