简体   繁体   English

Android工作室邮件问题

[英]Android studio Mail issue

I have set up classes in my app to send a mail based on the user's name email and message.我在我的应用程序中设置了类,以根据用户名 email 和消息发送邮件。 It seems in app as if it's working fine but no actual email is being sent.在应用程序中似乎工作正常,但没有发送实际的 email。 Can Anybody help?有人可以帮忙吗? Thank you in advance.先感谢您。

Here is the Gmail class i have set:这是我设置的 Gmail class :

public class GMail {公共 class GMail {

final String emailPort = "587"; // this is gMail's smtp port number
final String smtpAuth = "true";
final String starttls = "true";
final String emailHost = "smtp.gmail.com";
String fromEmail;
String fromPassword;
List<String> toEmailList;
String emailSubject;
String emailBody;
Properties emailProperties;
Session mailSession;
MimeMessage emailMessage;

// this will be the constructor of the email
public GMail(String fromEmail, String fromPassword, List<String> toEmailList, String emailSubject, String emailBody)
{
    this.fromEmail = fromEmail;
    this.fromPassword = fromPassword;
    this.toEmailList = toEmailList;
    this.emailBody = emailBody;

    //setting the server settings for Gmail
    emailProperties = System.getProperties();
    emailProperties.put("mail.smtp.port", emailPort);
    emailProperties.put("mail.smtp.auth", smtpAuth);
    emailProperties.put("mail.smtp.starttls.enable", starttls);
    Log.i("Gmail", "Mail server properties are now set.");

}

public MimeMessage createEmailMessage() throws AddressException,
        MessagingException, UnsupportedEncodingException{
        mailSession = Session.getDefaultInstance(emailProperties, null);
        emailMessage = new MimeMessage(mailSession);
        emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail));//address setup
        for(String toEmail : toEmailList){
            Log.i("GMail", "toEmail" + toEmail);
            emailMessage.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(toEmail));
        }
        emailMessage.setSubject(emailSubject); //email Subject
        emailMessage.setContent(emailBody, "text/html");
        return emailMessage;
}

public void sendEmail() throws AddressException, MessagingException
{
    Transport transport = mailSession.getTransport("smtp");
    transport.connect(emailHost, fromEmail, fromPassword);
    Log.i("Gmail", "allrecipients: " + emailMessage.getAllRecipients());
    transport.close();
    Log.i("Gmail", "Your Email has successfully been sent.");
}

} }

Here's my SendMailTask class这是我的 SendMailTask class

public class SendMailTask extends AsyncTask {公共 class SendMailTask 扩展 AsyncTask {

private ProgressDialog statusDialog;
private Activity sendMailActivity;

public SendMailTask(Activity activity) {
    sendMailActivity = activity;
}

// make the method for showing dialog progress
protected void onPreExecute() {
    statusDialog = new ProgressDialog(sendMailActivity);
    statusDialog.setMessage("Setting up..");
    statusDialog.setIndeterminate(false);
    statusDialog.setCancelable(false);
    statusDialog.show();
}
//method for creation and sending of email
@Override
protected Object doInBackground(Object... args) {
    try{
        Log.i("SendMailTask", "Setting up your email ..");
        publishProgress("Processing all your information ..");
        GMail androidEmail = new GMail(args[0].toString(),
                args[1].toString(), (List) args[2], args[3].toString(),
                args[4].toString());
        publishProgress("Preparing your information ..");
        androidEmail.createEmailMessage();
        publishProgress("Sending your information ..");
        androidEmail.sendEmail();
        publishProgress("Information sent.");
        Log.i("SendMailTask", "Information sent.");

    }catch(Exception e){
        publishProgress(e.getMessage());
        Log.e("SendMailTask", e.getMessage(), e);
    }
    return null;
}
// creating method for dialog messages.
@Override
public void onProgressUpdate(Object... values){
    statusDialog.setMessage(values[0].toString());
}
//method to get rid of the dialog message.
@Override
public void onPostExecute(Object result){
    statusDialog.dismiss();
}

} }

and here is the class that im trying to get the mail sent from:这是 class ,我试图从中获取邮件:

public class HelpPage extends AppCompatActivity {公共 class 帮助页面扩展 AppCompatActivity {

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

    final EditText mail1 = findViewById(R.id.email1);
    final EditText mail2 = findViewById(R.id.email2);
    final EditText nameIn = findViewById(R.id.hName1);
    final Button btnSub = findViewById(R.id.helpBtn);
    final EditText msgIn = findViewById(R.id.hMsg);
    final String password = "xxxxxxxx";
    final String sendemail = "come2gopj@gmail.com";
    final String recemail = "c2grecieve@gmail.com";
    final boolean connt;

    ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED){
        // Connection affirmative:)
        connt = true;
    }
    else {
        connt = false;
        Toast.makeText(getApplicationContext(), "You're not connected to the internet",
                Toast.LENGTH_LONG).show();
    }
    btnSub.setOnClickListener(
            arg0 -> {
                //method to make sure all fields are checked
                if(nameIn.getText().toString().equals("")||mail1.getText().toString().equals("")||mail2.getText().toString().equals("")||msgIn.getText().toString().equals(""))
                {
                    Toast.makeText(getApplicationContext(), "Please check you've filled all fields.",
                            Toast.LENGTH_LONG).show();
                }
                else if(connt!=true){
                    Toast.makeText(getApplicationContext(), "You're internet connection needs to be checked",
                            Toast.LENGTH_LONG).show();
                }
                else{
                    if(mail1.getText().toString().equals(mail2.getText().toString())){
                        Log.i("SendMailActivity", "Send Button Clicked.");
                        //declaring the recieving, password and sending of the email
                        List<String> toEmailList = Arrays.asList(recemail.split("\\s*,\\s*")); //Recipient List
                        Log.i("SendMailActivity", "To List: " + toEmailList);
                        String emailSubject = ((EditText) findViewById(R.id.hName1)).getText().toString();
                        String emailEmail = ((EditText) findViewById(R.id.email1)).getText().toString();
                        String emailBody = "User's Email : " + ((EditText) findViewById(R.id.email1)).getText().toString() + "\n" +
                                "User's message: "+((EditText) findViewById(R.id.hMsg)).getText().toString();
                        new SendMailTask(HelpPage.this).execute(sendemail, password,toEmailList,emailSubject,emailBody,emailEmail);//send the email with all the relevant data included
                        startActivity(new Intent(getApplicationContext(),AfterMail.class)); //this will start the next activity that i have included after the mail is sent
                    }
                    else{//method for checking the email inputs
                        Toast.makeText(getApplicationContext(), "Your emails don't match please try again.",
                                Toast.LENGTH_LONG).show();
                    }


                }

            });

}

These are the messages i get in the run dialog after I've pressed the send button:这些是我按下发送按钮后在运行对话框中收到的消息:

I/SendMailActivity: Send Button Clicked.I/SendMailActivity: To List: [c2grecieve@gmail.com] I/SendMailActivity:点击发送按钮。I/SendMailActivity:列表:[c2grecieve@gmail.com]

I/SendMailTask: Setting up your email.. I/SendMailTask:设置您的 email..

I/Gmail: Mail server properties are now set. I/Gmail:现在设置了邮件服务器属性。

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

I/.myapplication: Background concurrent copying GC freed 24080(6MB) AllocSpace objects, 5(92KB) LOS objects, 49% free, 2MB/4MB, paused 1.019ms total 105.897ms I/.myapplication:后台并发复制GC释放24080(6MB)个AllocSpace对象,5(92KB)LOS对象,49%空闲,2MB/4MB,暂停1.019ms共105.897ms

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@af22bc6 W/ActivityThread:handleWindowVisibility:令牌 android.os.BinderProxy@af22bc6 没有活动

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

I/chatty: uid=10085(com.example.myapplication2) RenderThread identical 5 lines I/chatty: uid=10085(com.example.myapplication2) RenderThread 相同的 5 行

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

I/GMail: toEmailc2grecieve@gmail.comD/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) I/GMail: toEmailc2grecieve@gmail.comD/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

I/Choreographer: Skipped 34 frames. I/Choreographer:跳过了 34 帧。 The application may be doing too much work on its main thread.应用程序可能在其主线程上做了太多工作。

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

D/NetworkSecurityConfig: No Network Security Config specified, using platform default D/NetworkSecurityConfig:未指定网络安全配置,使用平台默认值

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320) D/EGL_emulation: eglMakeCurrent: 0xe1205120: ver 3 1 (tinfo 0xe1203320)

I/Gmail: allrecipients: [Ljavax.mail.internet.InternetAddress;@80121b1 I/Gmail:所有收件人:[Ljavax.mail.internet.InternetAddress;@80121b1

I/Gmail: Your Email has successfully been sent.I/SendMailTask: Information sent. I/Gmail:您的 Email 已成功发送。I/SendMailTask:信息已发送。

I finally figured out what I was missing.我终于弄清楚我错过了什么。 in the GMail.java file i was missing 1 line of code to get the email to actually send.在 GMail.java 文件中,我缺少 1 行代码来让 email 实际发送。 `transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); `transport.sendMessage(emailMessage, emailMessage.getAllRecipients());

That was the line i was missing.那是我错过的那条线。 ` `

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM