JavaMail para Android - Email Com anexo

Olá a todos.

estou tentando mandar um e-mail com um anexo apartir de uma aplicação android para um e-mail X utilizando uma conta do google como conta de envio.

Testei alguns exemplos em Java e conseguia normalmente com um codigo enviar um arquivo apartir do caminho que eu especificasse.

tentei portar pro Android, mas o jar não entende alguma coisas que são da aplicação desktop.

Então tive de recorrer a um codigo diferente e aos jars do JavaMail.jar activation.jar e additionnal.jar .

tentei fazer como no exemplo da pagia do autor do port, mas o email com anexo (o mais importante) não funciona. ou geralmente ele envia algo com o nome que eu havia especificado pro caminho como invalido.

eu estou usando esse codigo:

[code]public class MailJavaSender {

//cria as propriedades necessárias para o envio de email  
public void senderMail(final MailJava mail) throws  
     UnsupportedEncodingException, MessagingException {  

    Properties props = new Properties();  
    props.setProperty("mail.transport.protocol", "smtp");  
    props.setProperty("mail.host", mail.getSmtpHostMail());  
    props.setProperty("mail.smtp.auth", mail.getSmtpAuth());  
    props.setProperty("mail.smtp.starttls.enable", mail.getSmtpStarttls());  
    props.setProperty("mail.smtp.port", mail.getSmtpPortMail());  
    props.setProperty("mail.mime.charset", mail.getCharsetMail());  

    props.put("mail.smtp.socketFactory.port", mail.getSmtpPortMail());              
    props.put("mail.smtp.socketFactory.class",                      
            "javax.net.ssl.SSLSocketFactory");              
    props.put("mail.smtp.socketFactory.fallback", "false");              
    props.setProperty("mail.smtp.quitwait", "false");               

    //classe anonima que realiza a autenticação  
    //do usuario no servidor de email.  
    Authenticator auth = new Authenticator() {  
        public PasswordAuthentication getPasswordAuthentication() {  
            return new PasswordAuthentication(  
                               mail.getUserMail(), mail.getPassMail()  
             );  
        }  
    };  

    // Cria a sessao passando as propriedades e a autenticação  
    Session session = Session.getDefaultInstance(props, auth);  
    // Gera um log no console referente ao processo de envio  
    session.setDebug(true);  

    //cria a mensagem setando o remetente e seus destinatários  
    Message msg = new MimeMessage(session);  
    //aqui seta o remetente  
    msg.setFrom(new InternetAddress(  
                      mail.getUserMail(), mail.getFromNameMail())  
     );  
    boolean first = true;  
    for (Map.Entry<String, String> map : mail.getToMailsUsers().entrySet()) {  
        if (first) {  
            //setamos o 1° destinatario  
            msg.addRecipient(Message.RecipientType.TO,  
                      new InternetAddress(map.getKey(), map.getValue())  
             );  
            first = false;  
        } else {  
            //setamos os demais destinatarios  
            msg.addRecipient(Message.RecipientType.CC,  
                      new InternetAddress(map.getKey(), map.getValue())  
             );  
        }  
    }  

    // Adiciona um Assunto a Mensagem  
    msg.setSubject(mail.getSubjectMail());  

    // Cria o objeto que recebe o texto do corpo do email  
    MimeBodyPart textPart = new MimeBodyPart();  
    textPart.setContent(mail.getBodyMail(), mail.getTypeTextMail());  

    // Monta a mensagem SMTP  inserindo o conteudo, texto e anexos  
    Multipart mps = new MimeMultipart();  
    for (int index = 0; index < mail.getFileMails().size(); index++) {  

        // Cria um novo objeto para cada arquivo, e anexa o arquivo  
        MimeBodyPart attachFilePart = new MimeBodyPart();  
        FileDataSource fds =   new FileDataSource(  
             mail.getFileMails().get(index)  
         );  
        attachFilePart.setDataHandler(new DataHandler(fds));  
        attachFilePart.setFileName(fds.getName());  

        //adiciona os anexos da mensagem  
        mps.addBodyPart(attachFilePart, index);  

    }  

    //adiciona o corpo texto da mensagem  
    mps.addBodyPart(textPart);  

    //adiciona a mensagem o conteúdo texto e anexo  
    msg.setContent(mps);  

    // Envia a Mensagem  
    Transport.send(msg);  
}  

} [/code]

com esse

[code]public class MainActv extends Activity {
EditText text;
Button add;
EditText response;
Button send;
Button save;

String txt = "";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tela);

    text = (EditText)findViewById(R.id.text);
    add = (Button) findViewById(R.id.add);
    send = (Button) findViewById(R.id.send);
    save = (Button) findViewById(R.id.send);
    response = (EditText) findViewById(R.id.response);
    
    final AlertDialog.Builder out = new AlertDialog.Builder(this);
    out.setPositiveButton("OK", new DialogInterface.OnClickListener() {	
    	@Override
		public void onClick(DialogInterface dialog, int which) {
			dialog.cancel();
		}
	});
    
    save.setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			try {
				//salvar(txt, getPackageName()+"/files/");
				salvar(txt);
				response.setText("Salvo");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				response.setText(e.getMessage());
			}
		}
	});
    add.setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			try {
				text.setText(txt);
				response.setText("Adicionado");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				response.setText(e.getMessage());
			}
		}
	});
    send.setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			try {
				enviar("@gmail.com", "Galaxy Tab", "", "TEste", "@hotmail.com", "data.data.br.com.app\\files\\"+"arquivo.txt");
				response.setText("Enviado!");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				response.setText(e.getMessage());
			}
		}
	});

}
public void enviar(String email, String nome, String senha, String assunto, String emaildestino, String caminhoAnexo) throws Exception{
    MailJava mj = new MailJava();
    //configuracoes de envio
    mj.setSmtpHostMail("smtp.gmail.com");
    mj.setSmtpPortMail("465");
    mj.setSmtpAuth("true");
    mj.setSmtpStarttls("true");
    mj.setUserMail(email);
    mj.setFromNameMail(nome);
    mj.setPassMail(senha);
    mj.setCharsetMail("ISO-8859-1");
    mj.setSubjectMail(assunto);
    mj.setBodyMail("text/html");
    mj.setTypeTextMail(MailJava.TYPE_TEXT_HTML);

    //sete quantos destinatarios desejar
    Map<String, String> map = new HashMap<String, String>();
    map.put("@hotmail.com", "Email - Hotmail");

    mj.setToMailsUsers(map);

    //seta quatos anexos desejar
    List<String> files = new ArrayList<String>();
    files.add(caminhoAnexo);

    mj.setFileMails(files);

    new MailJavaSender().senderMail(mj);

}

public void salvar(String txt) throws Exception{
	File f = new File("data.data.br.com.app\\files\\"+"arquivo.txt");
	f.mkdirs();
	FileOutputStream fos = null;   
    fos = openFileOutput(f.getPath(), Context.MODE_WORLD_WRITEABLE);             
    fos.write(txt.getBytes());   
    fos.close();	
}[/code]

eu conseguia enviar um arquivo para o email, mas o conteudo nao era o que eu queria e o nome dele chegava com o nome do caminho.

tipo datadatabrcomappfile.txt

é a minha primeira aplicação de android, mas não faço mais idéia pra aonde correr.

algupem tem um exemplo com apenas anexo? minha prioridade não é nem o corpo do email mas sim o anexo.

consegui.

eu passei a usar um cógido que eu já havia testado mas que eu achava que estava errado.

era só ter lido com atenção!

não vou postar aqui diretamente mas vou deixar o src com o androidmanifest dele de presente.

cara vc conhece algum tutorial de como criar uma app para receber e enviar email?

valeu

Qual a importação para XStrem? Porque você utilizou ela? Qual seria o processo para exportação em PDF?

Sinceramente eu não uso mais esse método para enviar e-mail.

a longo prazo ele fica uma bosta.

utilize uma combinação de Commons Email com a dependência do Java Mail para Android

http://commons.apache.org/proper/commons-email/

https://code.google.com/p/javamail-android/

Sobre o XStream eu uso a biblioteca comum dele com Dom4J (fornecido pelo XStream mesmo).

Para exportar um arquivo pdf use o iText.