我一直致力于反馈表。它由名称,电子邮件和反馈EditTexts组成。 我正在为用户创建Android应用程序,以使用JavaMail API 发送反馈。现在我的android工作正常,因为用户输入前面提到的空间中的详细信息并将反馈发送到作为收件人地址给出的邮件(即我的gmail帐户)。
问题:我已尝试使用EditText输入中的数据(用户的邮件ID)来获取用户的电子邮件ID,并将其显示在USER_NAME发送的gmail帐户帐户< / strong>但经过多次努力后,它给了我相同的数据,即邮件是由我发送的,只显示没有用户ID
我正在为您提供我的邮件帐户的屏幕截图
My gmail inbox where I received the mail from the user
正如您所看到的那样,现在有两封邮件,未读取的邮件未显示用户的电子邮件ID,而是显示我,因为邮件来自收件人地址中提供的用户名
我做过研究:
使用 setFrom(新的InternetAddress(电子邮件))此处电子邮件是发件人发送电子邮件的edittext。
进行了很多搜索,但没有任何想法在这里工作(无法提供链接,因为我没有太多的声誉来发布两个以上的链接。我有两张照片也在链接表单作为stackoverflow不允许我直接上传它。)
这也是 setFrom(新的InternetAddress(“发件人”+“&lt;”+电子邮件+“&gt;”))结果显示发件人
我最终做的是: setFrom(新的InternetAddress(Config.EMAIL,电子邮件)); 并以某种方式成功地在该部分的电子邮件地址中显示电子邮件。图片会给你更好的想法
但结果仍然相同,收件箱会反复向我显示发件人的电子邮件。
这是我的代码:
1。 SendMail.java
public class SendMail extends AsyncTask<Void,Void,Void> {
//Declaring Variables
private Context context;
private Session session;
//Information to send email
private String name;
private String email;
private String subject;
private String feedback;
private ProgressDialog progressDialog;
public SendMail(Context context,String name, String email,String subject, String feedback) {
this.context = context;
this.name = name;
this.email = email;
this.subject = subject;
this.feedback = feedback;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//Showing progress dialog while sending email
progressDialog = ProgressDialog.show(context,"Sending feedback","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,"Feedback Sent", Toast.LENGTH_LONG).show();
}
@Override
protected Void doInBackground(Void... voids) {
//creating properties
Properties properties = new Properties();
//Configuring properties for gmail
//If you are not using gmail you may need to change the values
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");
//creating new session
session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
}
});
InternetAddress fromAddress = null;
try {
fromAddress = new InternetAddress(Config.EMAIL,email);
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
//Creating MimeMessage object
MimeMessage mimeMessage = new MimeMessage(session);
//Setting sender address
mimeMessage.setFrom(fromAddress);
//Adding receiver
mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(Config.EMAIL));
//Adding subject
mimeMessage.setSubject(subject);
//Adding Message
mimeMessage.setText("Name:"+ " "+ name + "\n" + "Email:" + " " + email + "\n" +
"Feedback" + " " + feedback);
//Sending email
Transport.send(mimeMessage);
} catch (MessagingException e) {
Log.e("SendMail", e.getMessage(), e);
}
return null;
}
}
2.Config.java
public class Config {
public static final String EMAIL = "recipient_email@gmail.com";
public static final String PASSWORD ="password";
}
第3。 Feedback.java
private void sendEmail() {
//getting content from email
String subject = string.toString();
String email = inputEmail.getText().toString().trim();
String name = inputName.getText().toString().trim();
String feedback = inputFeedback.getText().toString().trim();
//Creating SendMail object
SendMail sendMail = new SendMail(getContext(),name,email,subject,feedback);
//Executing sendmail to send email
sendMail.execute();
}
请以某种方式建议我,以便我可以到达目的地。提前感谢你。
答案 0 :(得分:0)
如果您的应用使用您的凭据登录Gmail,则Gmail不会让您“伪造”发件人地址为其他用户。
此外,您真的不想在应用程序中嵌入Gmail密码。
更好的方法是创建一个Web应用程序,接受反馈表单的输入并发送电子邮件。 Android应用程序可以将表单数据发布到Web应用程序,Web应用程序将组成消息并将其发送,将用户的电子邮件地址添加为另一个标题字段或作为消息正文中的数据。这样可以确保您的Gmail密码在服务器上是安全的,而不是用户可以访问的应用程序。