Статьи

Как отправить электронную почту через Java Mail 1.4.3 и CKEditor с помощью IDE NetBeans

В этом уроке я покажу вам, как создать простой JFrame для отправки электронной почты, содержащей контент HTML:

Эта статья разделена на несколько частей, охватывающих темы от написания простых Java-классов отправителя электронной почты до интеграции JFrame с CKEditor , который является многофункциональным веб-редактором HTML. 

Загрузка и регистрация библиотек в IDE NetBeans 6.8

Прежде всего, вам необходимо скачать последнюю версию Java Mail с  этой страницы , а также DJ Native Swing . После загрузки библиотек их необходимо поместить в диспетчер библиотек NetBeans. Я рекомендую хранить все библиотеки, например, в C: \ Program Files \ Java \ library.

 

Создание приложения Java и добавление библиотек в проект

Выполните следующие шаги, чтобы начать создание приложения:

  1. Выберите  Файл -> Новый проект -> Приложение Java . Нажмите «Далее.
  2. Когда появится окно «Имя и местоположение» , назовите свой проект FCKEditorEmailSender и снимите флажок «Создать основной класс», чтобы в итоге вы создали пустой проект. Нажмите Готово.
  3. На вкладке «Проекты» щелкните правой кнопкой мыши «Библиотеки» и «Добавить библиотеку» в меню Затем выберите библиотеки, которые вы добавили из диспетчера библиотек. Теперь у вас должны быть файлы Java Mail и DJNativeSwing JAR. Ваш проект должен выглядеть так, как показано ниже:

Библиотеки

Создание пакета и классов Java

Теперь давайте сделаем настоящую работу по кодированию. Перейдите к созданному вами проекту, а затем создайте пакет с именем  EmailSender . В этом пакете создайте Java-класс с именем EmailSender (то же имя, не волнуйтесь)  из диалога New File. В классе создайте приватные поля, как показано ниже:

public class EmailSender {
private String smtpServer;
private String port;
private String user;
private String password;
private String auth;
private String from;

Предоставьте простой конструктор, нажав ALT + INSERT и выбрав Constructor …. Выберите все поля в окне.

Чтобы включить отправку электронной почты с помощью Java Mail API, вам нужно создать объект Properties, в который вы поместите всю необходимую информацию о сеансе SMTP, такую ​​как сервер, порт и пользователь. Для этого создайте следующий метод: 

private Properties prepareProperties()

Затем, когда вы готовите объект Properties, вы можете просто смоделировать сообщение электронной почты. Этот метод возвращает MimeMessage (что означает « Универсальный класс сообщений Internet Mail Extensions» ) . Затем создайте этот метод:

private MimeMessage prepareMessage(Session mailSession,String charset,
String from, String subject,
String HtmlMessage,String[] recipient)

Следующий этап отправки электронных писем через Интернет заключается в создании метода отправки сообщений с содержимым HTML. Создайте этот метод:

public void sendEmail(String subject,String HtmlMessage,String[] to) 

Большинство SMTP-серверов должны аутентифицировать удаленных пользователей, пытающихся отправить электронную почту. По этой причине нам нужно создать простой SMTPAuthenticator класс в пакете EmailSender . Этот класс расширяет javax.mail.Authenticator и предоставляет метод следующим образом :

protected PasswordAuthentication getPasswordAuthentication() 

Теперь мы добавим реализации методов, показанных выше:

private Properties prepareProperties()
{
Properties props = new Properties();
props.setProperty("mail.smtp.host", smtpServer);
props.setProperty("mail.smtp.port", port);
props.setProperty("mail.smtp.user", user);
props.setProperty("mail.smtp.password", password);
props.setProperty("mail.smtp.auth", auth);
return props;
}
private MimeMessage prepareMessage(Session mailSession,String charset,
String from, String subject,
String HtmlMessage,String[] recipient) {
//Multipurpose Internet Mail Extensions
MimeMessage message = null;
try {
message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress(from));
message.setSubject(subject);
for (int i=0;i<recipient.length;i++)
message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient[i]));
message.setContent(HtmlMessage, "text/html; charset=\""+charset+"\"");
} catch (Exception ex) {
Logger.getLogger(EmailSender.class.getName()).log(Level.SEVERE, null, ex);
}
return message;
}
public void sendEmail(String subject,String HtmlMessage,String[] to)
{
Transport transport = null;
try {
Properties props = prepareProperties();
Session mailSession = Session.getDefaultInstance(
props, new SMTPAuthenticator(from, password, true));
transport = mailSession.getTransport("smtp");
MimeMessage message = prepareMessage(mailSession, "ISO-8859-2",
from, subject, HtmlMessage, to);
transport.connect();
Transport.send(message);
} catch (Exception ex) {
}
finally{
try {
transport.close();
} catch (MessagingException ex) {
Logger.getLogger(EmailSender.class.getName()).
log(Level.SEVERE, null, ex);
}
}
}
package EmailSender;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class SMTPAuthenticator extends Authenticator{
private String username;
private String password;
private boolean needAuth;

public SMTPAuthenticator(String username, String password,boolean needAuth)
{
this.username = username;
this.password = password;
this.needAuth = needAuth;
}

@Override
protected PasswordAuthentication getPasswordAuthentication() {
if (needAuth)
return new PasswordAuthentication(username, password);
else return null;
}
}

Creating a Swing Form to Provide a Nice GUI

Now that we have finished the e-mail work, we concentrate on the Swing and FCKEditor integration. You need to click right button over package EmailSender and choose New -> JFrame Form, call this class SendEmail and put this class in EmailSender package. Now right click over JFrame Design View and select: Set Layout -> Border Layout.

Макет границы

Now when you try to drop JPanel from Pallete into Design View you will see a few borders which are simpy Content Holders of Border Layout. Please read about BorderLayout from official Java Docs. Click Panel from Pallete and drop panel as is in image below. In this area you will next put controls to get smtp values.

Опустить верх

Панель с элементами управления

Now right click over the panel above and select : Set Layout -> Null Layout. This will make your controls not floating when user will resize window and secondly controls will be in the same position as it was created in Design view. Test with some diffrent Layouts when you run your application to see what will happen ? Now you will need to create buttons to interact with user. Put new JPanel into lower «Place holder».

Конус вниз для кнопок

Add the two buttons:

Кнопки

And we are close to finishing the tutorial. Last thing to do is put FCKEditor in main method. Modify your:

public static void main(String[] args) 
UIUtils.setPreferredLookAndFeel();
NativeInterface.open();
final String configurationScript =
"FCKConfig.ToolbarSets[\"Default\"] = [\n" +
"['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],\n" +
"['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],\n" +
"['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],\n" +
"['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],\n" +
"'/',\n" +
"['Style','FontFormat','FontName','FontSize'],\n" +
"['TextColor','BGColor'],\n" +
"'/',\n" +
"['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],\n" +
"['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote'],\n" +
"['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],\n" +
"['Link','Unlink','Anchor'],\n" +
"['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak', '-', 'ShowBlocks'],\n" +
"];\n" +
"FCKConfig.ToolbarCanCollapse = false;\n";
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
htmlEditor = new JHTMLEditor(HTMLEditorImplementation.FCKEditor,
JHTMLEditor.FCKEditorOptions.setCustomJavascriptConfiguration(configurationScript));
SendEmail es2 = new SendEmail();
es2.setSize(new Dimension(800,600));
es2.add(htmlEditor,BorderLayout.CENTER);
es2.setLocationByPlatform(true);
es2.setVisible(true);
}
});
}

Now when you replace main method go to your Design View and double click both buttons to generate actionPerformed . Put this codes into proper buttons.Notice that I used code below to provide new Thread to prevent block Graphical User Interface during send e-mail:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
    emailer.sendEmail(subject.getText(),
    htmlEditor.getHTMLContent(),
    recipientsString);
    }
});  
   private void sendEmailActionPerformed(java.awt.event.ActionEvent evt) {                                          
// TODO add your handling code here:
StringTokenizer recepientsTokenizer = new StringTokenizer(to.getText(), ",");
final String[] recipientsString = new String[recepientsTokenizer.countTokens()];
for (int i = 0; i < recipientsString.length; i++) {
recipientsString[i] = recepientsTokenizer.nextToken();
}
final EmailSender emailer = new EmailSender(smtpServer.getText(),
port.getText(), username.getText(),
password.getPassword().toString(),
"true", from.getText());
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
emailer.sendEmail(subject.getText(),
htmlEditor.getHTMLContent(),
recipientsString);
}
});

}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
dispose();
}

Теперь вы можете построить свой проект и покрасоваться перед друзьями ?

Здесь вы можете скачать упакованный проект NetBeans.

Наконечник:

When you download DJ Native you can double-click the DJNativeSwing-SWTDemo.jar to look closer into the various amazing classesm such as JWebBrowser JHtmlEditor with different HtmlEditors.