Quantcast
Channel: Active questions tagged email - Stack Overflow
Viewing all articles
Browse latest Browse all 30083

How to forward your SMSs to your Google email AUTOMATICALLY?

$
0
0

I am an ultimate newbie at Java/android and would like to automatically forward my SMSs on my Google email. I have looked at those posts:

How can I read SMS messages from the device programmatically in Android?

https://www.simplifiedcoding.net/android-email-app-using-javamail-api-in-android-studio/

how to send email in background from the android phone to my email without using intent

but I am having issue putting everything together so that it works :( I probably do it all wrong as I do not understand all the java concepts yet... I am missing some methods I don't know how to import (ALT + ENTER won't work), and some other errors.

Please ignore code related to splashscreen, I managed to get that one right, it works :) Please put comments for dummies, that's where I stand right now :)

I have a CaptureSMSActivity java class:

package com.myapp.sendemail;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
final String myPackageName = getPackageName();
    if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {

    Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
    intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, myPackageName);
    startActivityForResult(intent, 1);
    }else {
    List<Sms> lst = getAllSms();
    }
    }else {
    List<Sms> lst = getAllSms();
    } {

}

A SendEmailActivity Java class:

package com.myapp.sendemail;

import android.content.Context;
import android.os.AsyncTask;
//import android.app.ProgressDialog;
//import android.widget.Toast;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

//Class is extending AsyncTask because this class is going to perform a networking operation
public class SendMail extends AsyncTask<Void,Void,Void> {

//Declaring Variables
private Context context;
private Session session;

//Information to send email
private String email;
private String subject;
private String message;

//Progressdialog to show while sending email
//private ProgressDialog progressDialog;

//Class Constructor
public SendMail(Context context, String email, String subject, String message){
    //Initializing variables
    this.context = context;
    this.email = email;
    this.subject = subject;
    this.message = message;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    //Showing progress dialog while sending email
    //progressDialog = ProgressDialog.show(context,"Sending message","Please wait...",false,false);
}

@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);
    //Dismissing the progress dialog
    //progressDialog.dismiss();
    //Showing a success message
    //Toast.makeText(context,"Message Sent",Toast.LENGTH_LONG).show();
}

@Override
protected Void doInBackground(Void... params) {
    //Creating properties
    Properties props = new Properties();

    //Configuring properties for gmail
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    //Creating a new session
    session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                //Authenticating the password
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
                }
            });

    try {
        //Creating MimeMessage object
        MimeMessage mm = new MimeMessage(session);

        //Setting sender address
        mm.setFrom(new InternetAddress(Config.EMAIL));
        //Adding receiver
        mm.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
        //Adding subject
        mm.setSubject(subject);
        //Adding message
        mm.setText(message);

        //Sending email
        Transport.send(mm);

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

}

A LoginParamsActivity Java class:

package com.myapp.sendemail;

public class LoginParamsActivity {
    public static final String EMAIL ="myemail@gmail.com";
    public static final String PASSWORD ="mypassword";
}

And my MainActivity Java class:

package com.myapp.sendemai;

import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Telephony;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

//Displaying Splashscreen
    private final static int LOADING_DURATION;

    static {
        LOADING_DURATION = 4000;
    }

    LinearLayout linearLayout;

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

        linearLayout = findViewById(R.id.lyt_progress);
        linearLayout.setVisibility(View.VISIBLE);
        linearLayout.setAlpha(1.0f);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                ViewAnimationActivity.fadeOut(linearLayout);
            }
        }, LOADING_DURATION);
    }

//Capturing SMS
public class Sms{
private String _id;
private String _address;
private String _msg;
private String _readState; //"0" for have not read sms and "1" for have read sms
private String _time;
private String _folderName;

public String getId(){
    return _id;
}
public String getAddress(){
    return _address;
}
public String getMsg(){
    return _msg;
}
public String getReadState(){
    return _readState;
}
public String getTime(){
    return _time;
}
public String getFolderName(){
    return _folderName;
}
public void setId(String id){
    _id = id;
}

public void setAddress(String address){
    _address = address;
}
public void setMsg(String msg){
    _msg = msg;
}
public void setReadState(String readState){
    _readState = readState;
}
public void setTime(String time){
    _time = time;
}
public void setFolderName(String folderName){
    _folderName = folderName;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                final String myPackageName = getPackageName();
                if (Telephony.Sms.getDefaultSmsPackage(mActivity).equals(myPackageName)) {

                    List<Telephony.Sms> lst = getAllSms();
                }
            }
        }
    }
    public List<Telephony.Sms> getAllSms() {
        List<Telephony.Sms> lstSms = new ArrayList<Sms>();
        Telephony.Sms objSms = new Telephony.Sms();
        Uri message = Uri.parse("content://sms/");
        ContentResolver cr = mActivity.getContentResolver();

        Cursor c = cr.query(message, null, null, null, null);
        mActivity.startManagingCursor(c);
        int totalSMS = c.getCount();

        if (c.moveToFirst()) {
            for (int i = 0; i < totalSMS; i++) {

                objSms = new Telephony.Sms();
                objSms.setId(c.getString(c.getColumnIndexOrThrow("_id")));
                objSms.setAddress(c.getString(c
                        .getColumnIndexOrThrow("address")));
                objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body")));
                objSms.setReadState(c.getString(c.getColumnIndex("read")));
                objSms.setTime(c.getString(c.getColumnIndexOrThrow("date")));
                if (c.getString(c.getColumnIndexOrThrow("type")).contains("1")) {
                    objSms.setFolderName("inbox");
                } else {
                    objSms.setFolderName("sent");
                }

                lstSms.add(objSms);
                c.moveToNext();
            }
        }
        // else {
        // throw new RuntimeException("You have no SMS");
        // }
        c.close();

        return lstSms;
    }
}

//Send Email

//Declaring EditText
private EditText editTextEmail;
private EditText editTextSubject;
private EditText editTextMessage;

    //Send button
  // private Button buttonSend;

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

    //Initializing the views
    editTextEmail = (EditText) findViewById(R.id.editTextEmail);
    editTextSubject = (EditText) findViewById(R.id.editTextSubject);
    editTextMessage = (EditText) findViewById(R.id.editTextMessage);

    //buttonSend = (Button) findViewById(R.id.buttonSend);

    //Adding click listener
    //buttonSend.setOnClickListener(this);
}

private void sendEmail() {
    //Getting content for email
    String email = editTextEmail.getText().toString().trim();
    String subject = editTextSubject.getText().toString().trim();
    String message = editTextMessage.getText().toString().trim();

    //Creating SendMail object
    SendEmail.SendMail sm = new SendEmail.SendMail(this, email, subject, message);

    //Executing sendmail to send email
    sm.execute();
}

@Override
public void onClick(View v) {
    sendEmail();
}

}

Thanks a lot in advance fr your help. Really appreciating.


Viewing all articles
Browse latest Browse all 30083

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>