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.