Como enviar e-mail usando o Spring?

7 respostas
R

bom dia pessoal,

estou tentado enviar e-mail usando o Spring, porem não estou conseguindo,

eu consegui usando o JavaMail, esse é uma exemplo que eu colega meu pegou em outro fórum, testei aqui e funcionou, o código é assim:

package br.com.mail.javamail;

import java.security.Security;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMailUsingJavaMail {

	private static final String SMTP_HOST_NAME = "smtp.gmail.com";
	
	private static final String SMTP_PORT = "465";

	private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

	public void sendSSLMessage(String recipients[], String subject,
		String message) throws MessagingException {
		boolean debug = true;

		Properties props = new Properties();
		props.put("mail.smtp.host", SMTP_HOST_NAME);
		props.put("mail.smtp.auth", "true");
		props.put("mail.debug", "true");
		props.put("mail.smtp.port", SMTP_PORT);
		props.put("mail.smtp.socketFactory.port", SMTP_PORT);
		props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
		props.put("mail.smtp.socketFactory.fallback", "false");
		
		Session session = Session.getDefaultInstance(props,  new javax.mail.Authenticator() {
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("email@envio", "senhadoemail");
			}
		});
		
		session.setDebug(debug);

		Message msg = new MimeMessage(session);
		
		InternetAddress addressFrom = new InternetAddress();
		msg.setFrom(addressFrom);
		
		msg.setHeader("Reply-To", "<email@resposta>");

		InternetAddress[] addressTo = new InternetAddress[recipients.length];
		for (int i = 0; i < recipients.length; i++) {
			addressTo[i] = new InternetAddress(recipients[i]);
		}

		msg.setRecipients(Message.RecipientType.TO, addressTo);
		
		msg.setSubject(subject);
		msg.setContent(message, "text/html; charset=\"iso-8859-1\"");
		Transport.send(msg);
	}
	
	public static void main(String args[]) throws Exception {
		
		SendMailUsingJavaMail javaMail = new SendMailUsingJavaMail();
		String[] recipients = {"email@destino"};
		String subject = "Assunto";
		String message = "Corpo do E-mail";
			
		try {
			javaMail.sendSSLMessage(recipients, subject, message);
		} catch (MessagingException e) {
			e.printStackTrace();
		}
		
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

		System.out.println("Email enviado com sucesso para os destinatarios!");
	
	}
}

porem com o Spring não estou conseguindo, eu dei uma olhada em alguns exemplos, mais nada,

alguem tem um exemplo bem básico, tipo esse do JavaMail?

valeu pessoal,
Rafael Hornung

7 Respostas

F

Chegou a olhar aqui?

http://static.springframework.org/spring/docs/2.5.x/reference/mail.html

R

fabiofalci:
Chegou a olhar aqui?

http://static.springframework.org/spring/docs/2.5.x/reference/mail.html

valeu pela dica,

eu dei uma olhada mais estou com a seguinte duvida,

sou iniciante no Spring, e me passaram a tarefa de mandar e-mail utilizando o Spring,

eu criei todas as classes como esta lá:

OrderManager.java
SimpleOrderManager.java

porem onde fica essa parte:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="mail.mycompany.com"/>
</bean>

<!-- this is a template message that we can pre-load with default state -->
<bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
  <property name="from" value="[email removido]"/>
  <property name="subject" value="Your order"/>
</bean>

<bean id="orderManager" class="com.mycompany.businessapp.support.SimpleOrderManager">
  <property name="mailSender" ref="mailSender"/>
  <property name="templateMessage" ref="templateMessage"/>
</bean>

pelo que eu entendi é aqui que fica a configuração, porem onde fica o usuário e a senha, como no exemplo que eu tinha criado utilizando o JavaMail?

Rafael Hornung

F

Pode configurar usuario assim

<bean id="springMailSender"
	class="org.springframework.mail.javamail.JavaMailSenderImpl">
	<property name="javaMailProperties">
		<props>
			<prop key="mail.MailTransport.protocol">smtp</prop>
			<prop key="mail.smtp.host">smtp.com</prop>
			<prop key="mail.smtp.user">user</prop>
			<prop key="mail.smtp.auth">true</prop>
		</props>
	</property>
</bean>

E a senha tu pode setar diretamente no springMailSender, assim como as outras propriedades.

R

[quote=fabiofalci]Pode configurar usuario assim

<bean id="springMailSender"
	class="org.springframework.mail.javamail.JavaMailSenderImpl">
	<property name="javaMailProperties">
		<props>
			<prop key="mail.MailTransport.protocol">smtp</prop>
			<prop key="mail.smtp.host">smtp.com</prop>
			<prop key="mail.smtp.user">user</prop>
			<prop key="mail.smtp.auth">true</prop>
		</props>
	</property>
</bean>

E a senha tu pode setar diretamente no springMailSender, assim como as outras propriedades.

o metodo placeOrder da classe SimpleOrderManager ficaria algo parecido com isso?

public void placeOrder(Order order) {
    	
    	JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl();
    	
    	javaMailSenderImpl.setProtocol("smtp");
    	javaMailSenderImpl.setHost("smtp.gmail.com");
    	javaMailSenderImpl.setUsername("emaildoqualenvio@.com");
    	javaMailSenderImpl.setPassword("senha");
      
    	SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage);
        msg.setTo(order.getEmailAddress());
        msg.setText(
            "Dear " + order.getFirstName()
                + order.getLastName()
                + ", thank you for placing order. Your order number is "
                + order.getOrderNumber());
        try{
            //this.mailSender.send(msg);
            javaMailSenderImpl.send(msg);
        }
        catch(MailException ex) {
            // simply log it and go on...
            System.err.println(ex.getMessage());            
        }
    }

eu estou usando uma outra classe para enviar:

public class enviarEmail {
	
	public static void main(String[] args) {
		SimpleOrderManager simpleOrderManager = new SimpleOrderManager();
		Order order = new Order();
		
		order.setEmailAddress("[email removido]");
		order.setFirstName("Rafael");
		order.setLastName("Hornung");
		order.setOrderNumber(123);
		
		simpleOrderManager.placeOrder(order);
	}
}

esta correto assim?

aqui aparece o seguinte erro:

Exception in thread "main" java.lang.NullPointerException
	at org.springframework.mail.SimpleMailMessage.<init>(SimpleMailMessage.java:75)
	at br.com.mail.spring2.SimpleOrderManager.placeOrder(SimpleOrderManager.java:30)
	at br.com.mail.spring2.enviarEmail.main(enviarEmail.java:14)

Rafael Hornung

F

Tu não pode usar o spring-ioc pra não precisar ficar dando new nas tuas classes?

Sobre o erro, o

this.templateMessage não esta nulo?

R

fabiofalci:
Tu não pode usar o spring-ioc pra não precisar ficar dando new nas tuas classes?

Sobre o erro, o

this.templateMessage não esta nulo?

não entendi como ficaria essa classe, eu estou tentando enviar uma e-mail direto de um main para testar,

como ficaria a classe SimpleOrderManager com todas as configurações do e-mail do qual esta sendo enviado?

se puder ajudar eu agradeço,

Rafael Hornung

F

Olha esse link

http://static.springframework.org/spring/docs/2.5.x/reference/beans.html

Tu tem que dar um setup no spring para poder pegar os beans que tu define no xml

Criado 24 de abril de 2008
Ultima resposta 24 de abr. de 2008
Respostas 7
Participantes 2