I successfully done validation of mail address but I want some suggestions for verifying an email address. The main point is when user enter an email id it should b checked that it is real or just a fake id.
Any suggestion?
No, this facility is not available. You can verify only when you have your own mail server the you are authorized to check the mail id is valid or not. Or when you own other server then you are permitted to get the mirror image of all others mail server only then you can verify, So if you are just a user of mail id then you can verify that the mail id is valid or not.
You can only verify the correct format of mail id by pattern checking.
Have fun
You can only check whether entered E-mail id is validate or not using regular expression, its not possible to check whether id is exists or not? as per my knowledge.
check out this link its already well answered
public static void main(String[] args) throws Exception {
String email = null;
String dns = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter email address to validate: ");
email = reader.readLine();
System.out.print("Enter DNS hostname to perform domain validation (e.g. ns.myhost.com): ");
dns = reader.readLine();
// create EmailInspector instance
EmailInspector inspector = new EmailInspector();
// enable debugging
inspector.setDebug(true);
// set DNS server
inspector.setNameserver(dns);
// set validation level
inspector.setEmailInspectionLevel(inspector.DOMAIN_VALIDATION);
// validate email
inspector.validate(email);
}
}
. Create new EmailInspector instance.
. Enable debugging.
. Set DNS server to be used for looking up domains.
. Set validation level.
. Validate email address.
Properties props = System.getProperties();
props.put("mail.smtp.user", senderEmail);
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
// Required to avoid security exception.
email.MyAuthenticator authentication =
new email.MyAuthenticator(senderEmail,senderMailPassword);
Session session =
Session.getDefaultInstance(props,authentication);
session.setDebug(true);
Related
I need to send an e-mail with attachments automatically without user input. I previously read these 2 answers.
Sending Email in Android using JavaMail API without using the default/built-in app
Android: Send e-mail with attachment automatically in the background.
But now I don't receive any e-mail and I already enabled the less secure apps in gmail. Here's my code :
public class Mail {
private String mailhost;
private String user;
private String password;
private Session session;
private String serverport;
public void main(String user, String password, String subject, String body){
sendFromGMail(user, password, subject,body);
}
private void sendFromGMail(String from, String pass, String subject, String body){
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "465");
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props);
MimeMessage message = new MimeMessage(session);
try {
InternetAddress adressTo = new InternetAddress(from);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, adressTo);
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch(MessagingException e){
Log.e("Not Sent", e.getMessage(), e);
}
}
}
And this is how I use it :
try {
Mail mail = new Mail();
mail.main(gmailusername, gmailpassword, "Test", "Test2");
this.publishProgress("Email Sent");
}catch(Exception e){
Log.e("SendMail", e.getMessage(), e);
this.publishProgress("Email not sent");
}
Edit : I don't want to use the built-in app as the title suggested. Just wanted to make it clear.
Java debug :
08-12 15:08:41.152 24062-24340/com.documax.cardreader I/System.out﹕ DEBUG: setDebug: JavaMail version 1.4.1
08-12 15:08:41.162 24062-24340/com.documax.cardreader I/System.out﹕ DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc.,1.4.1]
08-12 15:08:41.162 24062-24340/com.documax.cardreader I/System.out﹕ DEBUG SMTP: useEhlo true, useAuth true
08-12 15:08:41.162 24062-24340/com.documax.cardreader I/System.out﹕ DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false
Fix all these common mistakes, including getting rid of the Authenticator.
Get rid of the call to super() in your constructor, you don't need it.
Also, get rid of the ByteArrayDataSource class. You don't need your own since it comes with JavaMail. Plus, your program isn't even using it.
If it still doesn't work, update your post with your new code and new failure details.
My sendEmail() function works in Eclipse with straight Java and I can send emails without any issue, but once I plug the function into my Android application none of the emails are being sent. I have added the javax.mail and javax.activation JARs to my build path in both cases. Here is the code for the function and then the LogCat reading. On a button click sendEmailCustomer() is called and nothing occurs. Any suggestions are more than appreciated.
public void sendEmailCustomer() {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.stmp.user", "user");
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");
Session session = Session.getDefaultInstance(props,
new Authenticator() {
#Override
protected PasswordAuthentication getPasswordAuthentication() {
String username = "user";
String password = "password";
return new PasswordAuthentication(username, password);
}
});
EditText e = (EditText) findViewById(R.id.enterEmail);
String to = e.toString();
String from = "user";
String subject = "Testing...";
MimeMessage msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(from));
msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(
to));
msg.setSubject(subject);
msg.setText("Did you get this?");
Transport transport = session.getTransport("smtp");
transport.send(msg);
} catch (Exception exc) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(exc.toString());
builder.setTitle("Error!");
builder.setNeutralButton("OK",
new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
}
}
Updated LogCat errors. It sounds like the application cannot access the internet even though it has permission in my manifest. Why is this?
04-03 12:38:07.166: W/IInputConnectionWrapper(2528): showStatusIcon on inactive InputConnection
04-03 12:38:07.166: W/IInputConnectionWrapper(2528): InputConnection =
com.android.internal.widget.EditableInputConnection#411c5f28, active client = false
You'll want to fix these common mistakes, and this mistake. You might just want to copy this code for connecting to Gmail. If that still doesn't work for you, follow these debugging steps to get more information so we can help you.
Note also that you can use the latest JavaMail jar file instead of the older mail.jar file linked to above.
Make sure you're referencing your JAR libraries in your project and at the same time, use the Android version of JavaMail too.
try to add this lines in your "AndroidManifest.xml" file
<manifest... >
....
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
....
</manifest>
maybe your problem is with the internet permission.
Please refer to this SO thread for the solution. I also reccomend checking the permissions in your AndroidManifest.xml like SUNDAY suggested.
I want to create app on android and make it config E-mail setting on android device programmatically when it get setting data from server.
I have search around for android code example but I can't find any good example and I don't know where to start looking.
Can any one suggest where should I start looking?
Thank you
Update Sorry for an unclear question.
I used this method to send email programmatically . you can use this. it will help you.
//send email
boolean sendMail(String from,String to)
{
boolean isSend=false;
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true"); //enable for gmail
props.put("mail.smtp.user", "abc#gmail.com");
props.put("mail.smtp.password", "abc");
props.put("mail.smtp.port", "587"); //gmail port address
props.put("mail.smtp.auth", "true");
Log.d("tag","props set");
Session session = Session.getDefaultInstance(props,null);
Log.d("tag","session set");
MimeMessage message = new MimeMessage(session);
Log.d("tag","message set");
try {
message.setFrom(new InternetAddress(from));
InternetAddress add = new InternetAddress(to);
message.addRecipient(Message.RecipientType.TO, add);
message.setSubject("hello");
message.setText("hello world");
Transport transport = session.getTransport("smtp");
transport.connect(host,from, "hello world");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
isSend=true;
}
catch (AddressException ae) {
ae.printStackTrace();
isSend=false;
}
catch (MessagingException me) {
me.printStackTrace();
isSend=false;
}
return isSend;
}
Hello Friends i wan to make editable false in all edittext when i send mail by my application
programmatically
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto","test#mymail.com, null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "My Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Message);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
finish();
friends my question is i want Text Subject Feild and Text/Body feild Read Only user can not edited it's value so how can i make it any idae?
your passing a intent to android device to handle mailing function specifying to handle it once intent is passed it will be handle by gmail or any other email client installed in your phone once they handle and get your data that is subject and message your application will be in paused state i mean to say you don't have control over other applications that handles your data.
create your mail handling and sending mail instead of passing it as intent
set editable false works only when you have those edit fields inside your application not in other activities that are started by your intent
You can create you own email sending activity without passing intent to any native email client app.There you can easily disable the editText for message and subject. The code for sending email is:
public class SendMail{
public static void main(String[] args) {
final String username = "username#gmail.com";
final String password = "password";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("from-email#gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("to-email#gmail.com"));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler,"
+ "\n\n No spam to my email, please!");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
taken from here
Basically if you choose email chooser of android to send an email you lost all the control over this intent. So overriding these behaviour is very hard and might be not possible. So overcoming on this issue you can follow this link Sending Email in Android using JavaMail API without using the default/built-in app.
You can find how to use the javamail Api as in the above link.
Now you can make your own layout for mail activity. And you can use
youreditetxtWhichyouwanttodisable.setEditable(false);
This might be useful.
I used javamail api in my android project and parse String in "mail subject" and "mail content". In my gmail there are many mail boxes such as travel, job, photo.... I need go through all mail boxes and search mails in my conditions. But I found when call getData() it will login gmail and make connection again.
My question are
1.How can it Keep connection in android?
2.How can I search all the mail boxes in the same time?
Thanks for help.
private String downloadUrl () throws IOException {
receiveMail("username", "password");
return null;
}
receiveMail part
private static List<Message> receiveMail(String username, String Password) {
try {
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", IMAPS_PROTOCOL);
Session session = Session.getDefaultInstance(props, null );
session.setDebug(false);
final Store store = session.getStore(IMAPS_PROTOCOL);
store.connect(IMAPS_MAIL_HOTS , username, Password);
getData(store, "travel");
getData(store, "job");
getData(store, "photo");
} catch(Exception ex) {
ex.printStackTrace();
}
return null;
}
If you want to reuse a single connection for each folder, you need to be sure to close the folder before opening the next folder.