Отправка вложений /w JavaMail Android Studio

#java #android #android-studio #email #jakarta-mail

Вопрос:

У меня очень мало знаний о Java и работе с Android. Я пытался создать очень простое приложение для Android, которое будет отправлять фотографии до/после в качестве вложения. Это было довольно просто настроить то, что у меня уже есть, однако у меня было много проблем с добавлением вложений в мои электронные письма. После того, как я часами возился с кодом, стирая и перезапуская его несколько раз, я подумал, что было бы лучше всего попросить о помощи.

Вот все, что у меня есть на данный момент, это правильная отправка электронных писем. Я просто не понимаю, как включить намерение пользователя выбрать изображение из галереи, а затем использовать их выбор с помощью JavaMail, чтобы на самом деле прикрепить его к электронной почте.

Спасибо 🙂

MAINACTIVITY.JAVA

 public class MainActivity extends AppCompatActivity {

private Spinner email;
private EditText subject, message;
private Button btn;


Button beforeAttachment;
Button afterAttachment;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    email = findViewById(R.id.email);
    subject = findViewById(R.id.subject);
    message = findViewById(R.id.message);
    beforeAttachment = (Button) findViewById(R.id.beforeAttachment);
    afterAttachment = (Button) findViewById(R.id.afterAttachment);
    btn = findViewById(R.id.btn);


    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(MainActivity.this,
            android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.names));
    myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    email.setAdapter(myAdapter);

    //attachment button listener
    beforeAttachment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onPickPhoto(v);
        }
    });


    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            senEmail();
        }
    });


}

//Attachment--------------------------------------------------------------------------------------------
// Trigger gallery selection for a photo
public void onPickPhoto(View view) {
    // Create intent for picking a photo from the gallery
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

}


//------------------------------------------------------------------------------------------------------

public void senEmail() {
    try {
        String mEmail = email.getSelectedItem().toString();
        String mSubject = subject.getText().toString();
        String mMessage = message.getText().toString();

        JavaMailAPI javaMailAPI = new JavaMailAPI(this, mEmail, mSubject, mMessage);

        javaMailAPI.execute();
    }

    catch (Throwable t)
    {
        Toast.makeText(this, "Request failed try again: "   t.toString(),Toast.LENGTH_LONG).show();
    }
}
 

}

JAVAMAILAPI.java

 ublic class JavaMailAPI extends AsyncTask<Void, Void, Void> {

private Context context;

private Session session;
private String email, subject, message;


private ProgressDialog progressDialog;

public JavaMailAPI(Context context, String email, String subject, String message) {
    this.context = context;
    this.email = email;
    this.subject = subject;
    this.message = message;

}

//Execute progress Dialog
@Override
protected  void onPreExecute() {
    super.onPreExecute();
    progressDialog = ProgressDialog.show(context, "Sending message", "Please wait...",false,false);
}

//Execution notification
@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);
    //Dismissing the progress dialog
    progressDialog.dismiss();

    Toast.makeText(context,"Message Sent",Toast.LENGTH_LONG).show();
}


//API/SMTP Information
@Override
protected Void doInBackground(Void... voids) {
    Properties properties = new Properties();
    properties.put("mail.smtp.host", "smtp.gmail.com");
    properties.put("mail.smtp.socketFactory.port", "465");
    properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.port", "465");

    //Authentication (Utils)
    session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(Utils.EMAIL, Utils.PASSWORD);

        }
    });

    MimeMessage mimeMessage = new MimeMessage(session);
    try {


        mimeMessage.setFrom(new InternetAddress(Utils.EMAIL));
        mimeMessage.addRecipients(Message.RecipientType.TO, String.valueOf(new InternetAddress(email)));
        mimeMessage.setSubject(subject);
        mimeMessage.setText(message);

        Transport.send(mimeMessage);


        System.out.println("Message sent!");

    } catch (MessagingException e) {
        e.printStackTrace();
    }



    return null;

}
 

}

UTILS.java

 public class Utils {
//This is the FROM email
public static final String EMAIL = "";
//This is the FROM email PASSWORD
public static final String PASSWORD = "";}