JavaRush /בלוג Java /Random-HE /כיצד לשלוח דואר אלקטרוני מאפליקציית Java (עם דוגמה)
PodoBulge
רָמָה
Минск

כיצד לשלוח דואר אלקטרוני מאפליקציית Java (עם דוגמה)

פורסם בקבוצה
שליחת אימייל מאפליקציית Java היא דרישה נפוצה. זה לא משנה אם אתה עובד על אפליקציית Java ליבה, אפליקציית אינטרנט או אפליקציית Java ארגונית, ייתכן שתצטרך לשלוח דוא"ל כדי להתריע בפני צוות התמיכה על שגיאות, או פשוט לשלוח דוא"ל למשתמשים עם ההרשמה, אפס את הסיסמה שלהם, או בקש מהם לאשר את כתובת הדוא"ל לאחר ההרשמה. ישנם תרחישים רבים שבהם אתה צריך את היכולת לשלוח מיילים מאפליקציית Java. כיצד לשלוח דואר אלקטרוני מאפליקציית Java (עם דוגמה) - 1באפליקציות מוכנות כבר יש לך מודול או ספריה שעובדים עם כל התכונות לשליחת מיילים, כמו למשל היכולת לשלוח קבצים מצורפים, תמונות, כולל חתימות וטקסט עשיר במיילים, אבל אם אתה צריך לכתוב משהו מאפס, אז Java Mail API היא אפשרות מצוינת. במאמר זה נלמד כיצד לשלוח מיילים מאפליקציית Java באמצעות ה-API של הדואר ( javax.mail ). לפני כתיבת קוד, עליך לדעת כמה עקרונות בסיסיים של אופן פעולת הדוא"ל, לדוגמה אתה צריך שרת SMTP (Simple Mail Transfer Protocol) . אם אתה מפעיל את אפליקציית Java שלך על לינוקס, אז אתה צריך לדעת שהדמון SMTP משתמש ביציאה 25. אתה יכול להשתמש בכל שרת דואר כדי לשלוח הודעות באמצעות Java, כולל שרתי דואר ציבוריים כגון GMail, Yahoo או כל ספק שירות אחר, הכל אתה צריך זה פרטי שרת ה-SMTP שלהם , כגון שם מארח, יציאה, פרמטרי חיבור וכו'. אתה יכול גם להשתמש ב-SSL ( שכבת שקעים מאובטחת ), TLS ( Transport Layer Security ) כדי להתחבר ולשלוח מיילים בצורה מאובטחת, אבל הפכנו את הדוגמה הזו לפשוטה והתמקדנו בהיגיון מינימלי לשליחת מכתבים מאפליקציית Java. במאמרים הבאים נלמד כיצד לשלוח מייל באמצעות קבצים מצורפים, כיצד לשלוח מייל בפורמט HTML, כיצד לצרף תמונות למייל, כיצד להשתמש באימות SSL כדי להתחבר לשרת ה-GMail ולשלוח מיילים וכו'. כעת, בואו נבין (לדון) את הדוגמה הפשוטה הזו של Java Mail API .

קוד Java לדוגמה לשליחת אימייל

כדי לשלוח מכתב מתוכנית Java, תזדקק ל-Java Mail API ול- Java Activation Framework (JAF) ; ליתר דיוק, תזדקק ל- mail-1.4.5.jar , smtp-1.4.4.jar ו- activation-1.1.jar . עליך להוריד את קובצי ה-JAR הללו ולכלול אותם ב- Classpath שלך כדי להפעיל תוכנית זו. לחלופין, אתה יכול להשתמש ב-Maven לניהול תלות ולכלול שם את כל התלות. ברגע שיש לך את כל קבצי ה-JAR האלה, פשוט עקוב אחר השלבים שלהלן כדי ליצור ולשלוח דוא"ל באמצעות Java.
  1. צור אובייקט Sessionעל ידי קריאה Session.getDefaultInstance(properties), כאשר properties- מכיל את כל המאפיינים החשובים, למשל, שם המארח של שרת ה-SMTP.

  2. צור אובייקט MimeMessageעל ידי העברת האובייקט Sessionשהתקבל בשלב הקודם. יש לנו קבוצה של מאפיינים שונים באובייקט זה כגון נמען דוא"ל, נושא, גוף הודעה, קבצים מצורפים וכו'.

  3. השתמש בו javax.mail.Transportכדי לשלוח דוא"ל על ידי קריאה לשיטה סטטית send(email), שבה דוא"ל יכול להיות אובייקט MimeMessage.

מספר המאפיינים שאתה מעביר ליצירת אובייקט Sessionשונה בהתאם לסוג שרת ה-SMTP, לדוגמה, אם אתה משתמש בשרת SMTP שאינו דורש שום אימות, תוכל ליצור אובייקט Sessionעם מאפיין אחד בלבד, לדוגמה, smtp .mail.host, ואין צורך לציין את היציאה כי יש לה יציאה 25 כברירת מחדל. מצד שני, אם אתה מתחבר לשרת SMTP שדורש אימות TLS או SSL, כמו SMTP Host של GMail, אז אתה צריך לספק קצת יותר מאפיינים, כגון mail.smtp.port=547 עבור TLS ודואר. smtp.port= 457 עבור SSL. זוהי תוכנת Java שלמה שמתחברת לשרת SMTP סטנדרטי ללא אימות ושולחת הודעת טקסט באמצעות Java Mail API.
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* Java Program to send text mail using default SMTP server and without authentication.
* You need mail.jar, smtp.jar and activation.jar to run this program.
*
* @author Javin Paul
*/

public class EmailSender{
     public static void main(String args[]){

           String to = "receive@abc.om";         // sender email
           String from = "sender@abc.com";       // receiver email
           String host = "127.0.0.1";            // mail server host

           Properties properties = System.getProperties();
           properties.setProperty("mail.smtp.host", host);

           Session session = Session.getDefaultInstance(properties); // default session

           try {
                MimeMessage message = new MimeMessage(session); // email message

                message.setFrom(new InternetAddress(from)); // setting header fields

                message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

                message.setSubject("Test Mail from Java Program"); // subject line

                // actual mail body
                message.setText("You can send mail from Java program by using mail API, but you need" +
                                "couple of more JAR files e.g. smtp.jar and activation.jar");

                // Send message
                Transport.send(message); System.out.println("Email Sent successfully....");
               } catch (MessagingException mex){ mex.printStackTrace(); }

     }

}
פלט: אתה יכול להרכיב ולהפעיל את התוכנית הזו כדי לשלוח דוא"ל פשוט מתוכנת Java:
$ javac EmailSender.java
$ java EmailSender
דוא"ל נשלח בהצלחה.... כפי שאתה יכול לראות, קל מאוד לשלוח מיילים מתוכנת Java. לאחר שיצרת את האובייקט MimeMessage, עליך להוסיף נמענים, אותם ניתן לציין ב- TO, CC, BCC. לאחר שסיימנו עם הנמענים, עלינו לציין את נושא המכתב, ולבסוף, את תוכן המכתב עצמו על ידי קריאה לשיטה message.setText(); אם ברצונך לבצע דיוור מרובים, ניתן להשתמש בשיטות הבאות לציון נמענים:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
אתה יכול להוסיף אנשים לשדה TOבאמצעות Message.RecipientType.TO, לשדה CCבאמצעות Message.RecipientType.CC, ו BCC- Message.RecipientType.BCC.

שגיאות וחריגים

כאשר מתכנתי Java רבים מתחילים לראשונה לכתוב תוכנית לשליחת אימייל, הם נתקלים בשגיאה מכיוון שרובם חושבים ש-mail.jar ו-activation.jar יספיקו כדי לשלוח מייל מאפליקציית Java, מה שלא כך, במיוחד אם אתה שולח דוא"ל דרך שרת SMTP מקומי בלינוקס. אם תפעיל תוכנית זו רק עם mail.jar ו-activation.jar ב-CLASSPATH שלך, סביר להניח שתקבל שגיאה זו.

חריג 1:

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1;
        nested exception is:
            java.net.ConnectException: Connection refused: connect
            at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1984)
            at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:656)
            at javax.mail.Service.connect(Service.java:345)
            at javax.mail.Service.connect(Service.java:226)
            at javax.mail.Service.connect(Service.java:175)
            at javax.mail.Transport.send0(Transport.java:253)
            at javax.mail.Transport.send(Transport.java:124)
            at Testing.main(Testing.java:62)
        Caused by: java.net.ConnectException: Connection refused: connect
            at java.net.DualStackPlainSocketImpl.connect0(Native Method)
            at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
            at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
            at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
            at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
            at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
            at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528)
            at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:301)
            at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:229)
            at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1950)
       ... 7 more
למרות שהפתרון לשגיאה זו הוא פשוט מאוד, זה יכול לבלבל אותך. java.net.ConnectException: Connection refused: connectבדרך כלל הוא קורס כאשר השרת אינו פועל או שהיציאה אליה אתה מתחבר מצוינת באופן שגוי. פתרון: בנוסף ל-mail-1.4.5.jar, צריך גם smtp-1.4.4.jar ו-activation-1.1.jar.

חריג 2:

זוהי שגיאה נוספת בשם NoClassDefFoundError, המתייחסת בדרך כלל לקובץ JAR חסר ב-Classpath
Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingException
           at java.lang.Class.getDeclaredMethods0(Native Method)
           at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
           at java.lang.Class.getMethod0(Class.java:2764)
           at java.lang.Class.getMethod(Class.java:1653)
           at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
           at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
           at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
           at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
           at java.security.AccessController.doPrivileged(Native Method)
           at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
           at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
           at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
           at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
פתרון: הצלחתי לפתור את הבעיה שלי, זה היה בגלל Classpath שגוי. למרות שהיו לי את כל שלושת ה-JARs הנדרשים, קובץ Java class עבור התוכנית באותה ספרייה, והרצתי את התוכנית משם, Java לא הצליחה להבין את זה. ניסיתי את הפקודות הבאות והתוכנית עבדה מצוין:
java -cp mail-1.4.5.jar:smtp-1.4.4.jar:activation-1.1.jar:. JavaMailSender
דוא"ל נשלח בהצלחה.... שימו לב שהספרייה הנוכחית מסומנת בנקודה בסוף הארגומנט Classpath. מכיוון שהרצתי את התוכנית בלינוקס, השתמשתי בנקודתיים (:) במקום נקודה-פסיק (;) (כמו ב-Windows). זה הכל לגבי איך לשלוח דואר אלקטרוני מאפליקציית Java באמצעות ממשק ה-API של הדואר. אתה עשוי למצוא את זה מאוד פשוט, מכיוון שאתה לא צריך יותר משלושה קבצי JAR. זה הרבה יותר קל אם אתה משתמש ב- Gradle או Maven כדי לנהל תלות. במדריכים הבאים נראה דוגמאות מורכבות יותר של Java Mail API לשליחת מיילים עם קבצים מצורפים, עם תמונות ומיילים מעוצבים להפליא לשליחת דוחות וטבלאות. תרגום המאמר: כיצד לשלוח דואר אלקטרוני מתוכנית Java עם דוגמה
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION