Как можно проверить прагматичный электронную почту Yahoo или нет?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как можно проверить прагматичный электронную почту Yahoo или нет?

Сообщение Anonymous »

Я пишу этот код для проверки учетной записи Yahoo, но не могу ответить Yahoo?
Мне нужен сервис записи, подобный этому сайту (verifyemailaddress.io)
Лучшее, что вы можете сделать, чтобы проверить, является ли адрес электронной почты Реально проверить, зарегистрирован ли почтовый сервер для этого доменного имени.
При использовании кода я заметил проблему с серыми списками.
Серый список — это попытка защиты от спама, которая отказывает в обслуживании впервые, когда тройка клиента, отправителя и адреса достигает SMTP-сервера. Серый список вернет
временную ошибку (450), и поэтому адрес будет
отклонен. В этом случае, вероятно, лучше принять
адрес как проверенный, поскольку на данный момент
более доступной информации нет.
import java.io.;
импортировать java.net.;
импортировать java.util.;
импортировать javax.naming.;
импортировать javax.naming.directory.* ;

Код: Выделить всё

public class SMTP {
private static int hear( BufferedReader in ) throws IOException {
String line = null;
int res = 0;

while ( (line = in.readLine()) != null ) {
String pfx = line.substring( 0, 3 );
try {
res = Integer.parseInt( pfx );
}
catch (Exception ex) {
res = -1;
}
if ( line.charAt( 3 ) != '-' ) break;
}

return res;
}

private static void say( BufferedWriter wr, String text )
throws IOException {
wr.write( text + "\r\n" );
wr.flush();

return;
}

private static ArrayList getMX( String hostName )
throws NamingException {
// Perform a DNS lookup for MX records in the domain
Hashtable env = new Hashtable();
env.put("java.naming.factory.initial",
"com.sun.jndi.dns.DnsContextFactory");
DirContext ictx = new InitialDirContext( env );
Attributes attrs = ictx.getAttributes
( hostName, new String[] { "MX" });
Attribute attr = attrs.get( "MX" );

// if we don't have an MX record, try the machine itself
if (( attr == null ) || ( attr.size() == 0 )) {
attrs = ictx.getAttributes( hostName, new String[] { "A" });
attr = attrs.get( "A" );
if( attr == null )
throw new NamingException
( "No match for name '" + hostName + "'" );
}

// Huzzah! we have machines to try. Return them as an array list
// NOTE: We SHOULD take the preference into account to be absolutely
//   correct. This is left as an exercise for anyone who cares.
ArrayList res = new ArrayList();
NamingEnumeration en = attr.getAll();

while ( en.hasMore() ) {
String x = (String) en.next();
String f[] = x.split( " " );
if ( f[1].endsWith( "." ) )
f[1] = f[1].substring( 0, (f[1].length() - 1));
res.add( f[1] );
}
return res;
}

public static boolean isAddressValid( String address ) {
// Find the separator for the domain name
int pos = address.indexOf( '@' );

// If the address does not contain an '@', it's not valid
if ( pos == -1 ) return false;

// Isolate the domain/machine name and get a list of mail exchangers
String domain = address.substring( ++pos );
ArrayList mxList = null;
try {
mxList = getMX( domain );
}
catch (NamingException ex) {
return false;
}

// Just because we can send mail to the domain, doesn't mean that the
// address is valid, but if we can't, it's a sure sign that it isn't
if ( mxList.size() == 0 ) return false;

// Now, do the SMTP validation, try each mail exchanger until we get
// a positive acceptance. It *MAY* be possible for one MX to allow
// a message [store and forwarder for example] and another [like
// the actual mail server] to reject it.  This is why we REALLY ought
// to take the preference into account.
for ( int mx = 0 ; mx < mxList.size() ; mx++ ) {
boolean valid = false;
try {
int res;
Socket skt = new Socket( (String) mxList.get( mx ), 25 );
BufferedReader rdr = new BufferedReader
( new InputStreamReader( skt.getInputStream() ) );
BufferedWriter wtr = new BufferedWriter
( new OutputStreamWriter( skt.getOutputStream() ) );

res = hear( rdr );
if ( res != 220 ) throw new Exception( "Invalid header" );
say( wtr, "EHLO orbaker.com" );

res = hear( rdr );
if ( res != 250 ) throw new Exception( "Not ESMTP" );

// validate the sender address
say( wtr, "MAIL FROM: " );
res = hear( rdr );
if ( res != 250 ) throw new Exception( "Sender rejected" );

say( wtr, "RCPT TO: " );
res = hear( rdr );

// be polite
say( wtr, "RSET" ); hear( rdr );
say( wtr, "QUIT" ); hear( rdr );
if ( res != 250 )
throw new Exception( "Address is not valid!" );

valid = true;
rdr.close();
wtr.close();
skt.close();
}
catch (Exception ex) {
// Do nothing but try next host
}
finally {
if ( valid ) return true;
}
}
return false;
}

public static void main( String args[] ) {
String testData[] = {
"[email protected]", // Valid address
"[email protected]", // Invalid domain name
"[email protected]", // Invalid address
"[email protected]" // Failure of this method
};

for ( int ctr = 0 ; ctr < testData.length ; ctr++ ) {
System.out.println( testData[ ctr ] + " is valid? " +
isAddressValid( testData[ ctr ] ) );
}
return;
}
}
Как проверить учетную запись Yahoo?

Подробнее здесь: https://stackoverflow.com/questions/516 ... -not-exist
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»