الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ارسال ايميل دون استخدام مكتبة ال JavaMail

بدأه الاخير زمانه في 11 فبراير 2012 · 8 رد · 1,631 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد ارسال ايميل بأستخدام ال Socket فقط

هذا هو الكود - لكني احصل على خطأ

[code]
import java.net.*;
import java.io.*;
import java.util.*;

/**
* send SMTP email using socket
*
*/
public class SMTPTest
{ public static void main(String[] args)
{ SMTPTest smtp = new SMTPTest();
smtp.sendMail();
}

public void sendMail()
{
try
{
Socket s = new Socket("smtp.gmail.com", 578); //smtp.gmail.com, 465
out = new PrintWriter(s.getOutputStream());
in = new BufferedReader(new
InputStreamReader(s.getInputStream()));
String hostName = InetAddress.getLocalHost().getHostName();
System.out.println("hostName = " + hostName);
send(null);
send("HELO " + hostName);
send("MAIL FROM: " + "my email@gmail.com");
send("RCPT TO: " + "my email@gmail.com");
send("DATA");
send("Happy SMTP Programming!!");
send("Happy SMTP Programming!!");
send(".");
send("QUIT");
s.close();
out.close();
in.close();
}
catch(IOException e)
{ e.printStackTrace();
}
}

public void send(String s) throws IOException
{ if (s != null)
{ out.println(s);
out.flush();
}
String line;
if ((line = in.readLine()) != null) //output the response
System.out.println(line);
}

private PrintWriter out;
private BufferedReader in;
}

وهذا هو الخطأ الذي يظهر

java.net.UnknownHostException: smtp.gmail.com

at java.net.PlainSocketImpl.connect(Unknown Source)

at java.net.SocksSocketImpl.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at java.net.Socket.<init>(Unknown Source)

at java.net.Socket.<init>(Unknown Source)

at SMTPTest.sendMail(SMTPTest.java:19)

at SMTPTest.main(SMTPTest.java:12)

1

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#2

أعتقد أنه يجب أن تستخدم SSL للاتصال بالخدمة فهيٍ Secured SMTP تحتاج اتصال محمي..

لماذا لا تريد استخدم جافا ميل؟

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#3

شكرا اخي على الرد،،

هذا طلب البروفيسور بعدم استخدام هذه المكتبة.

لقد قمت بأستخدام

gmail-smtp-in.l.google.com

اختفى الخطأ الان لكن لا يتم ارسال الايميل.

علما انني استخدمت نفس هذه الايعازات من ال cmd وتم ارسال الايميل

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#4

بعد محاولات عديدة:

import java.net.*;
import java.io.*;
import java.util.*;

public class SendingEmailUsingSocket {

	public static void main(String[] args) {
		int port = 25; 
		String host = "smtp.gmail.com";

		try {           
			Socket socket = new Socket(host, port); 

			sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
			String username = encoder.encode("wajdyessam@gmail.com".getBytes());
			String password = encoder.encode("yourpassword".getBytes());

			DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
			DataInputStream is = new DataInputStream(socket.getInputStream());

			dos.writeBytes("HELO\r\n");
			dos.writeBytes("AUTH LOGIN");
			dos.writeBytes("\r\n");
			dos.writeBytes(username);
			dos.writeBytes("\r\n");
			dos.writeBytes(password);
			dos.writeBytes("\r\n");
			dos.writeBytes("MAIL FROM:<wajdyessam@hotmail.com>\r\n");
			dos.writeBytes("\r\n");
			dos.writeBytes("RCPT TO: <wajdyessam@gmail.com>\r\n");
			dos.writeBytes("DATA\r\n");
			dos.writeBytes("Subject: Email test\r\n");
			dos.writeBytes("Test 1 2 3");
			dos.writeBytes("\r\n.\r\n");
			dos.writeBytes("QUIT\r\n");

			dos.flush();

			String responseline;
			while((responseline = is.readLine())!=null) {
				System.out.println(responseline);
			}

			is.close();
			dos.close( );                  
			socket.close( );
		} 
		catch (IOException ex) {
			System.err.println(ex);
		}
	}
}

ملاحظات:

يفضل لك استخدام الTelnet للتعلم في كيفية ارسال الأوامر،، واجهت مشكلة أن الأمر الAuth Login كان يجب أن يتبعه اسم المستخدم مباشره بدون انتر ، في الTelnet الاكتشاف اسرع واسهل ،،

http://www.kongtechnology.com/2008/01/27/smtp-authentication-and-send-emails-using-telnet/

اسم المستخدم وكلمة المرور ترسل ب Base64 Encoding ، استخدمت طريقة سيئة أعلاه (كلاسات Sun القديمة والقابلة للتغيير ) ، لا تقوم بذلك الا كمثال والا ستحصل على عدة تحذيرات من المترجم.. استخدم مكتبة Apache Commons ، أنظر هنا:

http://www.rgagnon.com/javadetails/java-0598.html

اسم المستلم والمرسل اليه hard coded عليك بتغييرهم بالطبع..

بالتوفيق،

1

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#5

مشكور اخي وجدي على جهدك و متابعتك. جزاك الله خيرا.

بصورة سريعة قمت بتنفيذ البرنامج لكنيي لم احصل على شيء.

لا يوجد اخطاء - لكني لا استلم اي ايميل.

هل تنفذ البرنامج لديك اخي بصورة صحيحة؟

انا بالفعل قمت بتنفيذ العملية من خلال ال telnet وتنفذت - لكن الذي حصل ان الرسالة تم وضعها في ال spam

اما من خلال الكود بلغة الجافا - لم استلم شيء

سأطلع على الروابط التي ارفقتها

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#6

نعم وصلت في الinbox عادي..

المخرج سوف يكون بهذا الشكل/

C:\Users\WajdyEssam\Desktop>java SendingEmailUsingSocket
220 mx.google.com ESMTP gd8sm17398613wib.2
250 mx.google.com at your service
334 VhbWU6
334 3dvcmQ6
235 2.7.0 Accepted
250 2.1.0 OK gd8sm17398613wib.2
502 5.5.1 Unrecognized command. gd8sm17398613wib.2
250 2.1.5 OK gd8sm17398613wib.2
354  Go ahead gd8sm17398613wib.2
250 2.0.0 OK 1329080407 gd8sm17398613wib.2
221 2.0.0 closing connection gd8sm17398613wib.2

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#7

غريب - انا يظهر لي التنفيذ بصورة مختلفة نوعا ما

post-47438-015975500 1329081847_thumb.pn

هل ممكن هناك تأثير من الحاسبة على العملية؟

ربما سأجرب على حاسبة ثانية

المرفقات
java.png

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#8

العملية ايضا تفشل من خلال ال Telnet

post-47438-057740200 1329108126_thumb.pn

المرفقات
mail.png

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 13 فبراير 2012 في 07:42

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#9

موضوع رائع فعلا و شكرا للأستاذ وجدي ...

تم التثبيت

مواضيع مشابهة