Guest User

Untitled

a guest
Nov 27th, 2017
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.21 KB | None | 0 0
  1. package com.android.imran.emailapp003;
  2.  
  3. import java.util.Date;
  4. import java.util.List;
  5. import java.util.Properties;
  6. import javax.activation.CommandMap;
  7. import javax.activation.DataHandler;
  8. import javax.activation.DataSource;
  9. import javax.activation.FileDataSource;
  10. import javax.activation.MailcapCommandMap;
  11. import javax.mail.BodyPart;
  12. import javax.mail.Multipart;
  13. import javax.mail.PasswordAuthentication;
  14. import javax.mail.Session;
  15. import javax.mail.Transport;
  16. import javax.mail.internet.InternetAddress;
  17. import javax.mail.internet.MimeBodyPart;
  18. import javax.mail.internet.MimeMessage;
  19. import javax.mail.internet.MimeMultipart;
  20.  
  21.  
  22. public class Email extends javax.mail.Authenticator {
  23. private String _user;
  24. private String _pass;
  25.  
  26. private List<String> _to;
  27. private String _from;
  28.  
  29. private String _port;
  30. private String _sport;
  31.  
  32. private String _host;
  33.  
  34. private String _subject;
  35. private String _body;
  36.  
  37. private boolean _auth;
  38.  
  39. private boolean _debuggable;
  40.  
  41. private Multipart _multipart;
  42.  
  43.  
  44. public Email() {
  45. _host = "smtp.gmail.com"; // default smtp server
  46. _port = "465"; // default smtp port
  47. _sport = "465"; // default socketfactory port
  48.  
  49. _user = ""; // username
  50. _pass = ""; // password
  51. _from = ""; // email sent from
  52. _subject = ""; // email subject
  53. _body = ""; // email body
  54.  
  55. _debuggable = false; // debug mode on or off - default off
  56. _auth = true; // smtp authentication - default on
  57.  
  58. _multipart = new MimeMultipart();
  59.  
  60. // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.
  61. MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
  62. mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
  63. mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
  64. mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
  65. mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
  66. mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
  67. CommandMap.setDefaultCommandMap(mc);
  68. }
  69.  
  70. public Email(String user, String pass) {
  71. this();
  72.  
  73. _user = user;
  74. _pass = pass;
  75. }
  76.  
  77. public boolean send() throws Exception {
  78. Properties props = _setProperties();
  79.  
  80. if(!_user.equals("") && !_pass.equals("") && _to.size() > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) {
  81. Session session = Session.getInstance(props, this);
  82.  
  83. MimeMessage msg = new MimeMessage(session);
  84.  
  85. msg.setFrom(new InternetAddress(_from));
  86.  
  87. InternetAddress[] addressTo = new InternetAddress[_to.size()];
  88. for (int i = 0; i < _to.size(); i++) {
  89. addressTo[i] = new InternetAddress(_to.get(i));
  90. }
  91. msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
  92.  
  93. msg.setSubject(_subject);
  94. msg.setSentDate(new Date());
  95.  
  96. // setup message body
  97. BodyPart messageBodyPart = new MimeBodyPart();
  98. messageBodyPart.setText(_body);
  99. _multipart.addBodyPart(messageBodyPart);
  100.  
  101. // Put parts in message
  102. msg.setContent(_multipart);
  103.  
  104. // send email
  105. Transport.send(msg);
  106.  
  107. return true;
  108. } else {
  109. return false;
  110. }
  111. }
  112.  
  113. public void addAttachment(String filename) throws Exception {
  114. BodyPart messageBodyPart = new MimeBodyPart();
  115. DataSource source = new FileDataSource(filename);
  116. messageBodyPart.setDataHandler(new DataHandler(source));
  117. messageBodyPart.setFileName(filename);
  118.  
  119. _multipart.addBodyPart(messageBodyPart);
  120. }
  121.  
  122. @Override
  123. public PasswordAuthentication getPasswordAuthentication() {
  124. return new PasswordAuthentication(_user, _pass);
  125. }
  126.  
  127. private Properties _setProperties() {
  128. Properties props = new Properties();
  129.  
  130. props.put("mail.smtp.host", _host);
  131.  
  132. if(_debuggable) {
  133. props.put("mail.debug", "true");
  134. }
  135.  
  136. if(_auth) {
  137. props.put("mail.smtp.auth", "true");
  138. }
  139.  
  140. props.put("mail.smtp.port", _port);
  141. props.put("mail.smtp.socketFactory.port", _sport);
  142. props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  143. props.put("mail.smtp.socketFactory.fallback", "false");
  144.  
  145. return props;
  146. }
  147.  
  148. // the getters and setters
  149. public String getBody() {
  150. return _body;
  151. }
  152. public void setBody(String body) {
  153. this._body = body;
  154. }
  155.  
  156. public List<String> getTo(){
  157. return _to;
  158. }
  159. public void setTo(List<String> toArr) {
  160. this._to = toArr;
  161. }
  162.  
  163. public String getFrom(){
  164. return _from;
  165. }
  166. public void setFrom(String from){
  167. this._from = from;
  168. }
  169.  
  170. public String getSubject(){
  171. return _subject;
  172. }
  173. public void setSubject(String string) {
  174. this._subject = string;
  175. }
  176. }
  177.  
  178. package com.android.imran.emailapp003;
  179.  
  180. import android.app.Activity;
  181. import android.app.ProgressDialog;
  182. import android.os.AsyncTask;
  183. import android.util.Log;
  184.  
  185. import java.util.List;
  186.  
  187. public class ProcessEmail extends AsyncTask {
  188.  
  189. private ProgressDialog statusDialog;
  190. private Activity sendMailActivity;
  191.  
  192. public ProcessEmail(Activity activity) {
  193. sendMailActivity = activity;
  194. }
  195.  
  196. protected void onPreExecute() {
  197. statusDialog = new ProgressDialog(sendMailActivity);
  198. statusDialog.setMessage("Getting ready...");
  199. statusDialog.setIndeterminate(false);
  200. statusDialog.setCancelable(false);
  201. statusDialog.show();
  202. }
  203.  
  204. @Override
  205. protected Object doInBackground(Object... args) {
  206. try {
  207. Log.i("SendMailTask", "About to instantiate GMail...");
  208. publishProgress("Processing input....");
  209. Email sendMail = new Email(args[0].toString(), args[1].toString());
  210.  
  211. publishProgress("Preparing mail message....");
  212. sendMail.setFrom(args[0].toString());
  213. sendMail.setTo((List<String>) args[2]);
  214. sendMail.setSubject(args[3].toString());
  215. sendMail.setBody(args[4].toString());
  216. sendMail.addAttachment(args[5].toString());
  217.  
  218. publishProgress("Sending email....");
  219. sendMail.send();
  220.  
  221. publishProgress("Email Sent.");
  222. Log.i("SendMailTask", "Mail Sent.");
  223. } catch (Exception e) {
  224. publishProgress(e.getMessage());
  225. Log.e("SendMailTask", e.getMessage(), e);
  226. }
  227. return null;
  228. }
  229.  
  230. @Override
  231. public void onProgressUpdate(Object... values) {
  232. statusDialog.setMessage(values[0].toString());
  233.  
  234. }
  235.  
  236. @Override
  237. public void onPostExecute(Object result) {
  238. statusDialog.dismiss();
  239. }
  240.  
  241. }
  242.  
  243. package com.android.imran.emailapp003;
  244.  
  245. import android.content.Intent;
  246. import android.support.v7.app.AppCompatActivity;
  247. import android.os.Bundle;
  248. import android.util.Log;
  249. import android.view.View;
  250. import android.widget.Button;
  251. import android.widget.ImageButton;
  252. import android.widget.TextView;
  253. import android.widget.Toast;
  254.  
  255. import java.util.ArrayList;
  256. import java.util.Arrays;
  257. import java.util.List;
  258.  
  259. public class MainActivity extends AppCompatActivity {
  260.  
  261. private static int FILE_SELECT_CODE;
  262. private static int SELECT_PICTURE;
  263. String FilePath;
  264.  
  265. @Override
  266. public void onCreate(Bundle icicle) {
  267. super.onCreate(icicle);
  268. setContentView(R.layout.activity_main);
  269.  
  270. Button addImage = (Button) findViewById(R.id.send_email);
  271. addImage.setOnClickListener(new View.OnClickListener() {
  272. @Override
  273. public void onClick(View v) {
  274. String fromEmail = "*******@gmail.com";
  275. String fromPassword = "*****";
  276. List<String> toEmails = new ArrayList();
  277. toEmails.add("*******@gmail.com");
  278. toEmails.add("*******@live.com");
  279. String emailSubject = "This is an email sent using my Mail JavaMail wrapper from an Android device.";
  280. String emailBody= "Email body.";
  281. new ProcessEmail(MainActivity.this).execute(
  282. fromEmail, fromPassword, toEmails, emailSubject, emailBody, FilePath);
  283. }
  284. });
  285.  
  286. ImageButton selectFile= (ImageButton) findViewById(R.id.selectFile);
  287. selectFile.setOnClickListener(new View.OnClickListener() {
  288. @Override
  289. public void onClick(View v) {
  290. Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
  291. intent.setType("*/*");
  292. startActivityForResult(intent, FILE_SELECT_CODE);
  293. }
  294. });
  295. }
  296.  
  297. @Override
  298. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  299. if ((requestCode == FILE_SELECT_CODE) && (resultCode == -1)) {
  300. FilePath = data.getData().getPath();
  301. //Toast.makeText(this, FilePath, Toast.LENGTH_SHORT).show();
  302. }
  303. }
  304. }
  305.  
  306. 11-17 04:47:46.887 25788-26024/com.android.imran.emailapp003 E/SendMailTask﹕ IOException while sending message
  307. javax.mail.MessagingException: IOException while sending message;
  308. nested exception is:
  309. java.io.FileNotFoundException: /external/images/media/14: open failed: ENOENT (No such file or directory)
  310. at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:676)
  311. at javax.mail.Transport.send0(Transport.java:189)
  312. at javax.mail.Transport.send(Transport.java:118)
  313. at com.android.imran.emailapp003.Email.send(Email.java:105)
  314. at com.android.imran.emailapp003.ProcessEmail.doInBackground(ProcessEmail.java:42)
  315. at android.os.AsyncTask$2.call(AsyncTask.java:287)
  316. at java.util.concurrent.FutureTask.run(FutureTask.java:234)
  317. at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
  318. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
  319. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  320. at java.lang.Thread.run(Thread.java:841)
  321. Caused by: java.io.FileNotFoundException: /external/images/media/14: open failed: ENOENT (No such file or directory)
  322. at libcore.io.IoBridge.open(IoBridge.java:409)
  323. at java.io.FileInputStream.<init>(FileInputStream.java:78)
  324. at javax.activation.FileDataSource.getInputStream(FileDataSource.java:110)
  325. at javax.activation.DataHandler.writeTo(DataHandler.java:318)
  326. at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403)
  327. at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:874)
  328. at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:444)
  329. at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:102)
  330. at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:897)
  331. at javax.activation.DataHandler.writeTo(DataHandler.java:330)
  332. at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403)
  333. at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1745)
  334. at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:636)
  335.             at javax.mail.Transport.send0(Transport.java:189)
  336.             at javax.mail.Transport.send(Transport.java:118)
  337.             at com.android.imran.emailapp003.Email.send(Email.java:105)
  338.             at com.android.imran.emailapp003.ProcessEmail.doInBackground(ProcessEmail.java:42)
  339.             at android.os.AsyncTask$2.call(AsyncTask.java:287)
  340.             at java.util.concurrent.FutureTask.run(FutureTask.java:234)
  341.             at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
  342.             at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
  343.             at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  344.             at java.lang.Thread.run(Thread.java:841)
  345. Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
  346. at libcore.io.Posix.open(Native Method)
  347. at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
  348. at libcore.io.IoBridge.open(IoBridge.java:393)
  349.             at java.io.FileInputStream.<init>(FileInputStream.java:78)
  350.             at javax.activation.FileDataSource.getInputStream(FileDataSource.java:110)
  351.             at javax.activation.DataHandler.writeTo(DataHandler.java:318)
  352.             at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403)
  353.             at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:874)
  354.             at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:444)
  355.             at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:102)
  356.             at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:897)
  357.             at javax.activation.DataHandler.writeTo(DataHandler.java:330)
  358.             at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403)
  359.             at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1745)
  360.             at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:636)
  361.             at javax.mail.Transport.send0(Transport.java:189)
  362.             at javax.mail.Transport.send(Transport.java:118)
  363.             at com.android.imran.emailapp003.Email.send(Email.java:105)
  364.             at com.android.imran.emailapp003.ProcessEmail.doInBackground(ProcessEmail.java:42)
  365.             at android.os.AsyncTask$2.call(AsyncTask.java:287)
  366.             at java.util.concurrent.FutureTask.run(FutureTask.java:234)
  367.             at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
  368.             at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
  369.             at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  370.             at java.lang.Thread.run(Thread.java:841)
  371. 11-17 04:48:58.359 25788-25788/com.android.imran.emailapp003 W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
  372.  
  373. sendMail.setTo((List<String>) args[2]);
  374. sendMail.setSubject(args[3].toString());
  375. sendMail.setBody(args[4].toString());
  376. //sendMail.addAttachment(args[5].toString()); <- Error here
  377. publishProgress("Sending email....");
  378. sendMail.send();
  379.  
  380. :
  381.  
  382. Uri selectedData = data.getData();
  383. String[] filePathcolumn = {MediaStore.Files.FileColumns.DATA};
  384.  
  385. Cursor cursor = getContentResolver().query(selectedData, filePathcolumn, null, null, null);
  386. cursor.moveToFirst();
  387. Log.d(TAG, DatabaseUtils.dumpCursorToString(cursor));
  388. columnindex = cursor.getColumnIndex(filePath[0]);
  389. attachFile = selectedData.toString();
  390. filePath = Uri.parse(attachFile);
  391. cursor.close();
Add Comment
Please, Sign In to add comment