Java tutorial
/* * Copyright (c) 2010. Axon Auction Example * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.fuin.auction.command.server.base; import java.util.HashMap; import java.util.Map; import java.util.Properties; import javax.inject.Inject; import javax.inject.Named; import javax.mail.internet.MimeMessage; import org.apache.velocity.app.VelocityEngine; import org.axonframework.eventhandling.FullConcurrencyPolicy; import org.axonframework.eventhandling.annotation.AsynchronousEventListener; import org.axonframework.eventhandling.annotation.EventHandler; import org.fuin.auction.command.server.events.UserCreatedEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; import org.springframework.ui.velocity.VelocityEngineUtils; /** * Responsible for sending or receiving mails. */ @Named @AsynchronousEventListener(sequencingPolicyClass = FullConcurrencyPolicy.class) public class MailManager { private static final Logger LOG = LoggerFactory.getLogger(MailManager.class); @Inject private JavaMailSender mailSender; @Inject private VelocityEngine velocityEngine; @Inject @Named("mailProperties") private Properties mailProperties; /** * Sets the mail sender to a new value. * * @param mailSender * Mail sender to set. */ protected final void setMailSender(final JavaMailSender mailSender) { this.mailSender = mailSender; } /** * Sets the velocity engine to a new value. * * @param velocityEngine * Engine to set. */ protected final void setVelocityEngine(final VelocityEngine velocityEngine) { this.velocityEngine = velocityEngine; } /** * Sets the mail properties. * * @param props * Mail properties. */ protected final void setMailProperties(final Properties props) { this.mailProperties = props; } /** * Creates a welcome mail with a unique identifier to verify the email * address. * * @param event * Event to handle. */ @EventHandler public final void handle(final UserCreatedEvent event) { if (LOG.isDebugEnabled()) { LOG.debug("SEND user created mail to " + event.getEmail() + " [securityToken='" + event.getSecurityToken() + "']"); } final MimeMessagePreparator preparator = new MimeMessagePreparator() { public void prepare(final MimeMessage mimeMessage) throws Exception { final MimeMessageHelper message = new MimeMessageHelper(mimeMessage); message.setTo(event.getEmail().toString()); message.setFrom(mailProperties.getProperty("sender")); final Map<String, String> varMap = new HashMap<String, String>(); varMap.put("email", event.getEmail().toString()); varMap.put("userName", event.getUserName().toString()); varMap.put("securityToken", event.getSecurityToken().toString()); final String text = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "user-created-mail.vm", varMap); message.setText(text, true); } }; this.mailSender.send(preparator); } }