Browse Source

update gitignore + add full multi to/cc/bcc sending functionality via jakarta api, but more work needs to be done like making verbose toasts

Noah Vogt 3 years ago
parent
commit
793b44d7d5

+ 4 - 0
.gitignore

@@ -17,3 +17,7 @@ local.properties
 local.properties
 local.properties
 app/release/
 app/release/
 *__pycache__*
 *__pycache__*
+.project
+.settings/
+app/.classpath
+app/schemas/

+ 75 - 0
app/src/main/java/com/noahvogt/snailmail/mail/SendMail.java

@@ -0,0 +1,75 @@
+package com.noahvogt.snailmail.mail;
+
+import android.content.Context;
+
+import java.util.Properties;
+
+import jakarta.mail.Authenticator;
+import jakarta.mail.Message;
+import jakarta.mail.MessagingException;
+import jakarta.mail.PasswordAuthentication;
+import jakarta.mail.Session;
+import jakarta.mail.Transport;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeMessage;
+
+public class SendMail {
+    static Message message;
+    static Session session;
+    static Properties properties;
+
+    public static void sendMessage(String fromAddress, String toAddresses, String smtpHostname, int smtpPort, String username, String password,
+                                   String subject, String messageBody, Context context, String cc, String bcc) {
+        setupProperties(smtpHostname, smtpPort);
+        getSessionInstance(username, password);
+        composeMessage(fromAddress, subject, messageBody, toAddresses, cc, bcc);
+        transportMessage();
+    }
+
+    public static void composeMessage(String fromAddress, String subject, String messageBody, String to, String cc, String bcc) {
+        message = new MimeMessage(session);
+        try {
+            message.setFrom(new InternetAddress(fromAddress));
+
+            addRecipientsOfCertainTypeSuccess(Message.RecipientType.TO, to);
+            addRecipientsOfCertainTypeSuccess(Message.RecipientType.CC, cc);
+            addRecipientsOfCertainTypeSuccess(Message.RecipientType.BCC, bcc);
+
+            message.setSubject(subject);
+            message.setText(messageBody);
+        } catch (MessagingException e) {
+            System.out.println("Error while parsing message");
+        }
+    }
+
+    public static void addRecipientsOfCertainTypeSuccess(Message.RecipientType recipientType, String recipients) throws MessagingException {
+        String[] recipientsArray = recipients.split(",");
+        for (String recipient: recipientsArray)
+            message.addRecipient(recipientType, new InternetAddress(recipient));
+    }
+
+    public static void setupProperties(String smtpHostname, int smtpPort) {
+        properties = new Properties();
+        properties.put("mail.smtp.auth", "true");
+        properties.put("mail.smtp.starttls.enable", "true");
+        properties.put("mail.smtp.host", smtpHostname);
+        properties.put("mail.smtp.port", smtpPort);
+    }
+
+    public static void getSessionInstance(String username, String password) {
+        session = Session.getInstance(properties, new Authenticator() {
+            protected PasswordAuthentication getPasswordAuthentication() {
+                return new PasswordAuthentication(username, password);
+            }
+        });
+    }
+
+    public static void transportMessage() {
+        try {
+            Transport.send(message);
+            System.out.println("Message sent successfully");
+        } catch (MessagingException e) {
+            System.out.println("Error while sending message");
+        }
+    }
+}

+ 18 - 6
app/src/main/java/com/noahvogt/snailmail/ui/editor/EditorButtonHandler.java

@@ -10,6 +10,7 @@ import static com.noahvogt.snailmail.ui.editor.EditorFragment.replyIntent;
 
 
 import android.app.Activity;
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.Dialog;
+import android.content.Context;
 import android.content.Intent;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences;
 import android.widget.EditText;
 import android.widget.EditText;
@@ -22,6 +23,7 @@ import com.google.gson.reflect.TypeToken;
 import com.noahvogt.snailmail.MainActivity;
 import com.noahvogt.snailmail.MainActivity;
 import com.noahvogt.snailmail.data.MailServerCredentials;
 import com.noahvogt.snailmail.data.MailServerCredentials;
 import com.noahvogt.snailmail.data.MailFunctions;
 import com.noahvogt.snailmail.data.MailFunctions;
+import com.noahvogt.snailmail.mail.SendMail;
 
 
 import java.lang.reflect.Type;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -38,7 +40,7 @@ public class EditorButtonHandler {
 
 
     public void handleSendButton(Activity activity, SharedPreferences credentialPreferences, Dialog dialog, String currentMailUser,
     public void handleSendButton(Activity activity, SharedPreferences credentialPreferences, Dialog dialog, String currentMailUser,
                                  EditText sendingAddressObject, EditText receivingAddressObject, EditText subjectObject, EditText messageBodyObject,
                                  EditText sendingAddressObject, EditText receivingAddressObject, EditText subjectObject, EditText messageBodyObject,
-                                 EditText ccObject, EditText bccObject) {
+                                 EditText ccObject, EditText bccObject, Context context) {
         getCredentialsJsonData(credentialPreferences);
         getCredentialsJsonData(credentialPreferences);
 
 
         if (jsonData.isEmpty()) {
         if (jsonData.isEmpty()) {
@@ -50,7 +52,8 @@ public class EditorButtonHandler {
             if (isValidMessage(messageBodyObject, subjectObject, receivingAddressObject, sendingAddressObject)) {
             if (isValidMessage(messageBodyObject, subjectObject, receivingAddressObject, sendingAddressObject)) {
                 try {
                 try {
                     Toast.makeText(activity, "Sending ... ", Toast.LENGTH_SHORT).show();
                     Toast.makeText(activity, "Sending ... ", Toast.LENGTH_SHORT).show();
-                    sendMessage(dialog);
+                    sendMessageViaNewThread(context);
+                    dialog.dismiss();
                 } catch (com.chaquo.python.PyException pyException) {
                 } catch (com.chaquo.python.PyException pyException) {
                     Toast.makeText(activity, "Could not send message", Toast.LENGTH_SHORT).show();
                     Toast.makeText(activity, "Could not send message", Toast.LENGTH_SHORT).show();
                 }
                 }
@@ -118,7 +121,7 @@ public class EditorButtonHandler {
                 MailFunctions.validateEmail(receivingAddressObject) && MailFunctions.validateEmail(sendingAddressObject);
                 MailFunctions.validateEmail(receivingAddressObject) && MailFunctions.validateEmail(sendingAddressObject);
     }
     }
 
 
-    public void sendMessage(Dialog dialog) {
+    public void sendMessage(Dialog dialog, Context context) {
         MailFunctions.sendStarttlsMail(smtpHost, sendingAddress, receivingAddress, password, messageBody,
         MailFunctions.sendStarttlsMail(smtpHost, sendingAddress, receivingAddress, password, messageBody,
                 subject, ccStr, bccStr, smtpPort);
                 subject, ccStr, bccStr, smtpPort);
         dialog.dismiss();
         dialog.dismiss();
@@ -156,16 +159,25 @@ public class EditorButtonHandler {
                     Intent intent = new Intent(activity, NewDraftMessageActivity.class);
                     Intent intent = new Intent(activity, NewDraftMessageActivity.class);
                     activity.startActivityForResult(intent, MainActivity.NEW_WORD_ACTIVITY_REQUEST_CODE);
                     activity.startActivityForResult(intent, MainActivity.NEW_WORD_ACTIVITY_REQUEST_CODE);
 
 
-                    /* close the whole fragment */
                     dialog.dismiss();
                     dialog.dismiss();
                 })
                 })
                 .setNegativeButton("No", (closeDialog, id) -> {
                 .setNegativeButton("No", (closeDialog, id) -> {
-                    /* if this button is clicked, close the hole fragment */
                     dialog.dismiss();
                     dialog.dismiss();
                 });
                 });
 
 
-        /* create + show alert dialog */
         AlertDialog alertDialog = alertDialogBuilder.create();
         AlertDialog alertDialog = alertDialogBuilder.create();
         alertDialog.show();
         alertDialog.show();
     }
     }
+
+    public void sendMessageViaNewThread(Context context) {
+        Thread thread = new Thread(() -> {
+            try {
+                SendMail.sendMessage(sendingAddress, receivingAddress, smtpHost, smtpPort, sendingAddress, password, subject, messageBody, context, ccStr, bccStr);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        });
+
+        thread.start();
+    }
 }
 }

+ 1 - 1
app/src/main/java/com/noahvogt/snailmail/ui/editor/EditorFragment.java

@@ -95,7 +95,7 @@ public class EditorFragment extends DialogFragment implements PopupMenu.OnMenuIt
         sendButton.setOnClickListener(v -> {
         sendButton.setOnClickListener(v -> {
             EditorButtonHandler editorButtonHandler = new EditorButtonHandler();
             EditorButtonHandler editorButtonHandler = new EditorButtonHandler();
             editorButtonHandler.handleSendButton(getActivity(), mailServerCredentials, getDialog(), currentMailUser, sendingAddressObject,
             editorButtonHandler.handleSendButton(getActivity(), mailServerCredentials, getDialog(), currentMailUser, sendingAddressObject,
-                    receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject);
+                    receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject, getContext());
         });
         });
 
 
         return view;
         return view;