Email

18 respostas
juliocesarss

Como eu anexo uma imagem para enviar por email?

Estou utilizando esse código:

import java.io.IOException;
import java.io.PrintStream;
import javax.mail.MessagingException;
import sun.net.smtp.SmtpClient;

public class email {

    public email() {
    }

    public boolean enviar() throws MessagingException {

        String to = "[email removido]";

        String from = "[email removido]";


        try {
            SmtpClient client = new SmtpClient("mail.abilitytecnologia.com.br");  //servidor smtp
            client.from(from);
            client.to(to);
            PrintStream msg = client.startMessage();
            msg.println("to:" + to);

            msg.println("from:" + from);
            msg.println("Subject:Exemplo de Envio de e - mail");
            msg.print("\r\n");
            msg.println("Testando de email http://gregui.wordpress.com");

            client.closeServer();
        } catch (IOException e) {
            System.out.println(e.getMessage());
            return false;
        }
        return true;
    }

    public static void main(String args[]) throws MessagingException {
        email mail = new email();
        
        mail.enviar();
    }
}

18 Respostas

nel

Oi!

Porque não usa a API Java Mail?
Aqui no GUJ tem um exemplo e aqui no jGuru também.

Bom código!
Abraços.

juliocesarss

Pq não consigo fazer esse treco funcionar ><

Peguei esse código ae mas ta dando erro aqui

String host = args[0];

Erro:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
	at print.AttachExample.main(AttachExample.java:11)
Java Result: 1

Esse que eu postei eu consegui adptar da forma que eu queria, só falta o anexo da imagem.

juliocesarss

Ahh agora entendi como funciona --’’

Seria assim neh

String host = "mail.abilitytecnologia.com.br";
        String from = "[email removido]";
        String to = "[email removido]";
        String fileAttachment = "C:/Documents and Settings/j.simoes/Desktop/print/print1.jpg";

Podia ter um comentario na frente dizendo o que colocar na varivel neh -.-

Mas tudo bem, de qualquer for não funcionou, só recebi o email, mas não veio nada escrito, nem assunto e nem o anexo =S

mateuscs

Metodo utilizado por psampei
no forum: http://www.guj.com.br/java/125738-resolvido---javamail---enviar-pdf-anexado-no-email-in-memory--ajuda

Code 1: Call 2 method passing requirement parameter:

Obs: Always ContentType = application/octet-stream

view plaincopy to clipboardprint?

    ByteArrayInputStream attachStream = new ByteArrayInputStream((byte[]) prt.getContent());  
        //call constructor class:InputStreamDataSource  
        InputStreamDataSource isds = new InputStreamDataSource("Testepdf.pdf", prt.getContentType(),attachStream);  
        //call method sendMail(InputStreamDataSource,host,from,to)  
        sendMail(isds, s_Host, s_SendFrom, s_SendTo);  



Code 2: Class InputStreamDataSource

view plaincopy to clipboardprint?

    // statement DataSource  
    private class InputStreamDataSource implements DataSource {  
          
        private String name;  
        private String contentType;  
        private ByteArrayOutputStream baos;  
      
        InputStreamDataSource(String name, String contentType,  
                InputStream inputStream) throws IOException {  
            int read;             
            this.name = name;  
            this.contentType = contentType;  
              
            baos = new ByteArrayOutputStream();  
              
            byte[] buff = new byte[256];              
            while ((read = inputStream.read(buff)) != -1) {  
                baos.write(buff, 0, read);  
            }  
        }  
      
        public String getContentType() {  
            // TODO Auto-generated method stub  
            return contentType;  
        }  
      
        public InputStream getInputStream() throws IOException {  
            // TODO Auto-generated method stub  
            return new ByteArrayInputStream(baos.toByteArray());  
        }  
      
        public String getName() {  
            // TODO Auto-generated method stub  
            return name;  
        }  
      
        public OutputStream getOutputStream() throws IOException {  
            // TODO Auto-generated method stub  
            throw new IOException("Cannot write to this read-only resource");  
        }  
    }  



Code 3: mehod sendMail(InputStreamDataSource, host, from, to)

view plaincopy to clipboardprint?

    protected void sendMail(InputStreamDataSource attach, String host,  
            String from, String to) {  
        // create some properties and get the default Session  
        Properties props = System.getProperties();  
        props.put("mail.smtp.host", host);  
      
        Session session = Session.getInstance(props, null);  
      
        try {  
            // create a message  
            MimeMessage msg = new MimeMessage(session);  
            msg.setFrom(new InternetAddress(from));  
            InternetAddress[] address = { new InternetAddress(to) };  
            msg.setRecipients(Message.RecipientType.TO, address);  
            msg.setSubject("Assunto teste.");  
      
            // create and fill the first message part  
            MimeBodyPart bp1 = new MimeBodyPart();  
            bp1.setText("Texto teste.");  
      
            // create the second message part  
            MimeBodyPart bp2 = new MimeBodyPart();  
                           // attach the file to the message  
            bp2.setDataHandler(new DataHandler(attach));  
                           // getNameFile  
            bp2.setFileName(attach.getName());  
      
            // create the Multipart and add its parts to it  
            Multipart mp = new MimeMultipart();  
            mp.addBodyPart(bp1);  
            mp.addBodyPart(bp2);  
      
            // add the Multipart to the message  
            msg.setContent(mp);  
      
            // set the Date: header  
            msg.setSentDate(new Date());  
      
            // send the message  
            Transport.send(msg);  
            System.out.println("Email sent successfully!");  
      
        } catch (MessagingException mex) {  
            mex.printStackTrace();  
            Exception ex = null;  
            if ((ex = mex.getNextException()) != null) {  
                ex.printStackTrace();  
            }  
        }  
    }
nel

juliocesarss:
Ahh agora entendi como funciona --’’

Seria assim neh

String host = "mail.abilitytecnologia.com.br";
        String from = "[email removido]";
        String to = "[email removido]";
        String fileAttachment = "C:/Documents and Settings/j.simoes/Desktop/print/print1.jpg";

Podia ter um comentario na frente dizendo o que colocar na varivel neh -.-

Mas tudo bem, de qualquer for não funcionou, só recebi o email, mas não veio nada escrito, nem assunto e nem o anexo =S

Queres tudo mastigado hein?
Se o seu código não funcionou porque não posta ele completo para que possamos analisar e dizer o que pode estar errado parceiro? :slight_smile:

mateuscs

nel,

Concordo, posta seu codigo ae champz
;D

juliocesarss

Queres tudos mastigado? O código ta ali no link só fiz essas alterações que postei… Mas de qualquer jeito ta ae

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class AttachExample {

    public static void main(String args[])throws Exception {
        String host = "mail.abilitytecnologia.com.br";
        String from = "[email removido]";
        String to = "[email removido]";
        String fileAttachment = "C:/Documents and Settings/j.simoes/Desktop/print/print1.jpg";

        // Get system properties
        Properties props = System.getProperties();

        // Setup mail server
        props.put("mail.smtp.host", host);

        // Get session
        Session session = Session.getInstance(props, null);

        // Define message
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
        message.setSubject("Hello JavaMail Attachment");

        // create the message part 
        MimeBodyPart messageBodyPart = new MimeBodyPart();

        //fill message
        messageBodyPart.setText("Hi");

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);

        // Part two is attachment
        messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(fileAttachment);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(fileAttachment);
        multipart.addBodyPart(messageBodyPart);

        // Put parts in message
        message.setContent(multipart);

        // Send the message
        Transport.send(message);
    }
}
nel
// Part two is attachment   
        MimeBodyPart messageBodyPartAtt = new MimeBodyPart();   
        DataSource source = new FileDataSource(fileAttachment);   
        messageBodyPartAtt.setDataHandler(new DataHandler(source));   
        messageBodyPartAtt.setFileName(fileAttachment);   
        multipart.addBodyPart(messageBodyPart);   
  
        // Put parts in message   
        message.setContent(multipart);

É bem possível que estivesse perdendo referência ao primeiro Body, já que tu criou uma nova referência a variavél.
E outro detalhe, tenta dar um:

File file = new File("C:/Documents and Settings/j.simoes/Desktop/print/print1.jpg");
FileInputStream fis = new FileInputStream(file);

Veja se não vai gerar exceção porque esse "caminho" é bem estranho e não sei se funciona.
E por fim, gerou alguma exceção? Creio que não já que o e-mail foi recebido...mas..

mateuscs

Seta tamem sua mensagem com os seguintes parametros:

Session session = Session.getInstance(
					Properties.getProperties(), auth);
			MimeMessage message = new MimeMessage(session);

			message.setFrom(new InternetAddress(emailRemet, nomeRemet));

			message.addRecipient(Message.RecipientType.TO, new InternetAddress(
					emailDest, nomeDest));

			message.setSubject(assunto);
			
			message.setContent(corpo, "text/plain");

			Transport.send(message);
juliocesarss
nel:
// Part two is attachment   
        MimeBodyPart messageBodyPartAtt = new MimeBodyPart();   
        DataSource source = new FileDataSource(fileAttachment);   
        messageBodyPartAtt.setDataHandler(new DataHandler(source));   
        messageBodyPartAtt.setFileName(fileAttachment);   
        multipart.addBodyPart(messageBodyPart);   
  
        // Put parts in message   
        message.setContent(multipart);

É bem possível que estivesse perdendo referência ao primeiro Body, já que tu criou uma nova referência a variavél.
E outro detalhe, tenta dar um:

File file = new File("C:/Documents and Settings/j.simoes/Desktop/print/print1.jpg");
FileInputStream fis = new FileInputStream(file);

Veja se não vai gerar exceção porque esse "caminho" é bem estranho e não sei se funciona.
E por fim, gerou alguma exceção? Creio que não já que o e-mail foi recebido...mas..

=S

Estranhoo.. mas essa parte é só a do anexo, mas nem anexo e nem mensagem estão indo. Se bem que pra mim só importa que a imgem em anexo chegue.

Será que tem algum problema com o caminho? Não gerou nenhuma excessão não, e esse caminho funcionou certinho num código anterior, pois eu primeiro salvo a imagem nesse local para depois anexar e essa caminho funcionou corretamente para salvar.

nel

Você realizou as devidas alterações em seu código?
Se sim, poste o código alterado.

juliocesarss

nel:
Você realizou as devidas alterações em seu código?
Se sim, poste o código alterado.

-.-

Vc ta lendo o tópico direito?

Acabei de postar ali em cima…

olhaa… no link ta o código que você postou certo?

E esse que postei foi esse código com as minhas alterações, como email, servidor e tals…

Mas vamos la novamente …

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class AttachExample {

    public static void main(String args[])throws Exception {
       
//aqui que fiz as alterações
        String host = "mail.abilitytecnologia.com.br";
        String from = "[email removido]";
        String to = "[email removido]";
        String fileAttachment = "C:/Documents and Settings/j.simoes/Desktop/print/print1.jpg";

        // Get system properties
        Properties props = System.getProperties();

        // Setup mail server
        props.put("mail.smtp.host", host);

        // Get session
        Session session = Session.getInstance(props, null);

        // Define message
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
        message.setSubject("Hello JavaMail Attachment");

        // create the message part 
        MimeBodyPart messageBodyPart = new MimeBodyPart();

        //fill message
        messageBodyPart.setText("Hi");

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);

        // Part two is attachment
        messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(fileAttachment);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(fileAttachment);
        multipart.addBodyPart(messageBodyPart);

        // Put parts in message
        message.setContent(multipart);

        // Send the message
        Transport.send(message);
    }
}

Só pra lembrar…aonde fiz as alterações o código era assim

String host = args[0];
    String from = args[1];
    String to = args[2];
    String fileAttachment = args[3];

Se tiver mais alguma alteração que precise fazer me fale…

mateuscs

juliocesarss:
nel:
Você realizou as devidas alterações em seu código?
Se sim, poste o código alterado.

-.-

Vc ta lendo o tópico direito?

Acabei de postar ali em cima…

olhaa… no link ta o código que você postou certo?

E esse que postei foi esse código com as minhas alterações, como email, servidor e tals…

Mas vamos la novamente …

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class AttachExample {

    public static void main(String args[])throws Exception {
       
//aqui que fiz as alterações
        String host = "mail.abilitytecnologia.com.br";
        String from = "[email removido]";
        String to = "[email removido]";
        String fileAttachment = "C:/Documents and Settings/j.simoes/Desktop/print/print1.jpg";

        // Get system properties
        Properties props = System.getProperties();

        // Setup mail server
        props.put("mail.smtp.host", host);

        // Get session
        Session session = Session.getInstance(props, null);

        // Define message
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
        message.setSubject("Hello JavaMail Attachment");

        // create the message part 
        MimeBodyPart messageBodyPart = new MimeBodyPart();

        //fill message
        messageBodyPart.setText("Hi");

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);

        // Part two is attachment
        messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(fileAttachment);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(fileAttachment);
        multipart.addBodyPart(messageBodyPart);

        // Put parts in message
        message.setContent(multipart);

        // Send the message
        Transport.send(message);
    }
}

Só pra lembrar…aonde fiz as alterações o código era assim

String host = args[0];
    String from = args[1];
    String to = args[2];
    String fileAttachment = args[3];

Se tiver mais alguma alteração que precise fazer me fale…

Você não realizou nenhuma alteração que citei…
:?

nel

Não cara, é que eu não tenho mais o que fazer e estou aqui, é isso.
Nunca li o seu tópico, então aproveita e torce para outro vir e lhe dar a solução :smiley:

Só um detalhe, eu já disse acima para modificar o seu código NOVAMENTE mas você não fez a mudança, seu código esta exatamente o mesmo.
Vou repetir, tem referência a objeto sendo sobrescrita ai e não está criando ela corretamente.

Mas eu sei que tu é um cara esperto e vai achar a solução.
Abraços.

mateuscs

nel:
Não cara, é que eu não tenho mais o que fazer e estou aqui, é isso.
Nunca li o seu tópico, então aproveita e torce para outro vir e lhe dar a solução :smiley:

Só um detalhe, eu já disse acima para modificar o seu código NOVAMENTE mas você não fez a mudança, seu código esta exatamente o mesmo.
Vou repetir, tem referência a objeto sendo sobrescrita ai e não está criando ela corretamente.

Mas eu sei que tu é um cara esperto e vai achar a solução.
Abraços.

  1. Concordo…

Reveja os conceitos que postamos.

nel

mateuscs:
juliocesarss:
nel:
Você realizou as devidas alterações em seu código?
Se sim, poste o código alterado.

-.-

Vc ta lendo o tópico direito?

Acabei de postar ali em cima…

olhaa… no link ta o código que você postou certo?

E esse que postei foi esse código com as minhas alterações, como email, servidor e tals…

Mas vamos la novamente …

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class AttachExample {

    public static void main(String args[])throws Exception {
       
//aqui que fiz as alterações
        String host = "mail.abilitytecnologia.com.br";
        String from = "[email removido]";
        String to = "[email removido]";
        String fileAttachment = "C:/Documents and Settings/j.simoes/Desktop/print/print1.jpg";

        // Get system properties
        Properties props = System.getProperties();

        // Setup mail server
        props.put("mail.smtp.host", host);

        // Get session
        Session session = Session.getInstance(props, null);

        // Define message
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
        message.setSubject("Hello JavaMail Attachment");

        // create the message part 
        MimeBodyPart messageBodyPart = new MimeBodyPart();

        //fill message
        messageBodyPart.setText("Hi");

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);

        // Part two is attachment
        messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(fileAttachment);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(fileAttachment);
        multipart.addBodyPart(messageBodyPart);

        // Put parts in message
        message.setContent(multipart);

        // Send the message
        Transport.send(message);
    }
}

Só pra lembrar…aonde fiz as alterações o código era assim

String host = args[0];
    String from = args[1];
    String to = args[2];
    String fileAttachment = args[3];

Se tiver mais alguma alteração que precise fazer me fale…

Você não realizou nenhuma alteração que citei…
:?

E ele tem coragem ainda de perguntar se não estou lendo o tópico…

juliocesarss

nel:
Não cara, é que eu não tenho mais o que fazer e estou aqui, é isso.
Nunca li o seu tópico, então aproveita e torce para outro vir e lhe dar a solução :smiley:

Só um detalhe, eu já disse acima para modificar o seu código NOVAMENTE mas você não fez a mudança, seu código esta exatamente o mesmo.
Vou repetir, tem referência a objeto sendo sobrescrita ai e não está criando ela corretamente.

Mas eu sei que tu é um cara esperto e vai achar a solução.
Abraços.

Eu entendi o que você disse, porém não sei o que fazer ja que se eu tiro a parte que esta sobreescrevendo ele da erro e não vai, sei que pode ter um possivel problema ali mas não sei resolver.

@Mateuscs

Vou tentar o que você citou…

Vlw

mateuscs

AGAIN :evil:

mateuscs:
Seta tamem sua mensagem com os seguintes parametros:
Session session = Session.getInstance(
					Properties.getProperties(), auth);
			MimeMessage message = new MimeMessage(session);

			message.setFrom(new InternetAddress(emailRemet, nomeRemet));

			message.addRecipient(Message.RecipientType.TO, new InternetAddress(
					emailDest, nomeDest));

			message.setSubject(assunto);
			
			message.setContent(corpo, "text/plain");

			Transport.send(message);
Criado 19 de agosto de 2011
Ultima resposta 19 de ago. de 2011
Respostas 18
Participantes 3