LXF97:Java EE
Dionysius (обсуждение | вклад) (→Почтовый сервис) |
|||
Строка 1: | Строка 1: | ||
− | {{ | + | http://www.textervart.com |
− | [[ | + | {{Цикл/Java EE}} |
− | == | + | [[ÐаÑегоÑиÑ:УÑебники]] |
+ | ==ÐоÑÑовÑй ÑеÑвиÑ== | ||
− | [[Media:JavaEE_LXF97.tar. | + | [[Media:JavaEE_LXF97.tar.gzâ|СкаÑаÑÑ Ð¸ÑÑ
однÑй код пÑимеÑа]] |
− | : ''' | + | : '''ЧÐСТЬ 9''' ХоÑиÑе оÑнаÑÑиÑÑ ÑÐ²Ð¾Ñ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð¿Ð¸ÑаÑÑ Â«Ð½Ð° деÑÐµÐ²Ð½Ñ Ð´ÐµÐ´ÑÑке»? '''ÐлекÑÐ°Ð½Ð´Ñ Ðабаев''' Ð·Ð½Ð°ÐµÑ Ð¿Ð¾Ð´Ñ
одÑÑее ÑÑедÑÑво. |
− | + | ÐеÑмоÑÑÑ Ð½Ð° заÑилÑе бÑаÑзеÑа в ÑеÑии, JEE им не огÑаниÑиваеÑÑÑ. ÐавайÑе попÑобÑем поÑÑлаÑÑ Ð¿Ð¸ÑÑма из Java (Ð²ÐµÐ´Ñ ÐºÐ°Ð¶Ð´Ð°Ñ Ñ
оÑоÑÐ°Ñ Ð¿ÑогÑамма должна ÑмеÑÑ ÑообÑаÑÑ ÑазÑабоÑÑикам об оÑибкаÑ
), и Ñделаем ÑÑо пÑиложение не бÑаÑзеÑнÑм, а «обÑÑнÑм». | |
− | === | + | ===ÐоÑоÑко о поÑÑе=== |
− | + | ЧÑÐ¾Ð±Ñ ÑабоÑаÑÑ Ñ Ð¿Ð¾ÑÑой, нÑжно ÑмеÑÑ ÐµÑ Ð¾ÑпÑавлÑÑÑ Ð¸ полÑÑаÑÑ. ÐÑи попÑÑке ÑазобÑаÑÑÑÑ Ð² ÑÑом Ð²Ñ Ð½Ð°ÑкнеÑеÑÑ Ð½Ð° ÑледÑÑÑие бÑквоÑоÑеÑÐ°Ð½Ð¸Ñ (Ñ ÑазнÑми ваÑиаÑиÑми): '''SMTP, POP, IMAP'''. РаÑÑмоÑÑим кÑаÑко, ÑÑо ÑÑо Ñакое и как ÑÑим полÑзоваÑÑÑÑ (а Ñакже где поÑиÑаÑÑ Ð¿Ð¾Ð¿Ð¾Ð´Ñобнее). | |
* '''SMTP''' | * '''SMTP''' | ||
− | + | ÐÑи помоÑи Simple Mail Transfer Protocol (пÑоÑÑого пÑоÑокола пеÑедаÑи поÑÑÑ) поÑÑа пеÑедаеÑÑÑ Ñ ÐºÐ»Ð¸ÐµÐ½Ñа на ÑеÑвеÑ. ÐÑпÑавлÑеÑÑÑ Ñо еÑÑÑ. ÐÑоÑокол ÑекÑÑовÑй, и еÑли еÑÑÑ Ð¶ÐµÐ»Ð°Ð½Ð¸Ðµ, можно оÑпÑавлÑÑÑ Ð¿Ð¸ÑÑма пÑÑмо из telnetâа. | |
* '''POP''' | * '''POP''' | ||
− | + | Тоже ÑекÑÑовÑй пÑоÑокол, но Ñже не Ð´Ð»Ñ Ð¿ÐµÑедаÑи, а Ð´Ð»Ñ Ð¿Ñиема ÑообÑений. ÐÐ¾Ð¶ÐµÑ Ð²ÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¿Ð¾ поÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑÑÐ¸ÐºÑ (ÑколÑко | |
− | + | ÑообÑений, какой иÑ
ÑазмеÑ), загÑÑзиÑÑ ÑообÑение по номеÑÑ Ð¸ Ñак далее. | |
* '''IMAP''' | * '''IMAP''' | ||
− | '''POP''' | + | '''POP''' пÑедполагаеÑ, ÑÑо поÑÑа ÑкаÑиваеÑÑÑ Ð½Ð° ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸ Ñам Ñже ÑаÑкладÑваеÑÑÑ Ð¿Ð¾ папкам, обÑабаÑÑваеÑÑÑ, гÑÑппиÑÑеÑÑÑ. ÐÑи ÑÑом Ñ ÑеÑвеÑа ÑообÑÐµÐ½Ð¸Ñ ÑÑиÑаÑÑÑÑ. ÐÑо не вÑегда Ñдобно. Ðак Ñаз Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑÑ Ð½Ð° ÑеÑвеÑе Ñоздан пÑоÑокол '''IMAP'''. Ðак и пÑедÑдÑÑие два, он ÑекÑÑовÑй. Ðо Ñ ÐµÐ³Ð¾ помоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ не ÑолÑко полÑÑиÑÑ ÑообÑениÑ, но и ÑоздаÑÑ Ð½Ð° ÑеÑвеÑе папкÑ, пеÑемеÑÑиÑÑ Ð¿Ð¸ÑÑмо кÑда-нибÑдÑ, подпиÑаÑÑÑÑ Ð½Ð° полÑÑение изменений (новÑÑ
пиÑем) в папке, и Ñак далее. |
− | * '''GoogleMail/HotMail/ | + | * '''GoogleMail/HotMail/â¦''' |
− | + | Ðо и ÑÑо не вÑÑ. ÐÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¿ÑоÑоколами, но некоÑоÑÑе ÑеÑвиÑÑ ÑабоÑаÑÑ Â«Ð¿Ð¾-ÑвоемÑ». РеÑли '''GoogleMail''' пÑедоÑÑавлÑÐµÑ '''POP'''-инÑеÑÑейÑ, Ñо '''Hotmail''', напÑимеÑ, неÑ. Ð Ñаком ÑлÑÑае обÑÑно еÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо Ñвой, неÑÑандаÑÑнÑй пÑоÑокол. | |
− | === | + | ===ÐÑого=== |
− | + | РиÑоге полÑÑаеÑÑÑ, ÑÑо ÑазнÑÑ
пÑоÑоколов много-много (ÑÑо не ÑÑиÑÐ°Ñ Ð²Ð°ÑианÑов и нÑанÑов, комбинаÑий коÑоÑÑÑ
ÑоÑни). Ð ÑÑÐ¾Ð±Ñ Ð¿Ð¾-ÑеловеÑеÑки вÑе ÑÑо обÑабаÑÑваÑÑ, пÑиÑлоÑÑ Ð¿Ð¸ÑаÑÑ Ð±Ñ Ð¾Ð³Ñомное колиÑеÑÑво кода. РпоÑом его оÑлаживаÑÑ⦠ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑÑно, ÑаÑÑмаÑÑÐ¸Ð²Ð°Ñ ÑеÑевÑе пÑиложениÑ, оÑпÑавкÑ/полÑÑение пиÑем обÑ
одÑÑ ÑÑоÑоной. ÐейÑÑвиÑелÑно, заÑем? ÐÐ¾Ð¼Ñ Ð½Ñжно, и Ñак ÑазбеÑеÑÑÑ. | |
− | + | Ðо в Java, как вÑегда, Ñже позабоÑилиÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ ÑпÑоÑÑиÑÑ Ð¶Ð¸Ð·Ð½Ñ ÑеловекÑ, коÑоÑÐ¾Ð¼Ñ Ð½Ñжно ÑаÑÑÑлаÑÑ Ð¿Ð¸ÑÑма â позабоÑилиÑÑ Ð½Ð° Ñамом вÑÑÑем ÑÑовне (в Sun Microsystems) и доÑÑаÑоÑно каÑеÑÑвенно. | |
− | === | + | ===Ргде волÑÐµÐ±Ð½Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°?=== |
− | + | ÐÑÑÑ ÑÐ°ÐºÐ°Ñ Ð·Ð°Ð¼ÐµÑаÑелÑÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека, '''JavaMail'''. Ðна доÑÑаÑоÑно кÑÑÐ¿Ð½Ð°Ñ (224 килобайÑа ÑолÑко JAR-Ñайл), заÑо и ÑÐ¼ÐµÐµÑ Ð¾ÑÐµÐ½Ñ Ð¼Ð½Ð¾Ð³Ð¾. Ð Ñего не ÑÐ¼ÐµÐµÑ â можно наÑÑиÑÑ, благо аÑÑ
иÑекÑÑÑа наÑÑÑаиваемаÑ. ÐавайÑе поÑмоÑÑим, как Ñ Ð½ÐµÐ¹ ÑабоÑаÑÑ. | |
− | === | + | ===ÐодгоÑовка=== |
− | + | ÐÐ»Ñ Ð½Ð°Ñала ÑкаÑаем ÑÐ°Ð¼Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекÑ. СÑÑаниÑка пÑодÑкÑа наÑ
одиÑÑÑ Ð¿Ð¾ адÑеÑÑ http://java.sun.com/products/javamail/; ÑкаÑиваÑÑ Ð½Ñжно, как водиÑÑÑ, поÑледний Ñелиз (1.4). Также понадобиÑÑÑ JavaBeans Activation Framework (JAF), коÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ загÑÑзиÑÑ Ñо ÑÑÑаниÑки ÑÑдом: http://java.sun.com/products/javabeans/jaf/index.jsp. | |
− | + | ÐоÑле загÑÑзки и ÑазаÑÑ
ивиÑованиÑ, полÑÑаем две библиоÑеки: '''mail.jar''' и '''activation.jar'''. ÐеÑÐ²Ð°Ñ Ð¸Ð· ниÑ
поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð²Ñе возможнÑе пÑоÑоколÑ, поÑÑÐ¾Ð¼Ñ ÑÐ°Ð·Ð¼ÐµÑ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑаÑоÑно внÑÑиÑелÑнÑй. ÐÑли ÑÑо-Ñо из ÑÑого многообÑÐ°Ð·Ð¸Ñ Ð²Ð°Ð¼ не нÑжно, можно воÑполÑзоваÑÑÑÑ ÑÑезаннÑми веÑÑиÑми, они Ñакже ÑодеÑжаÑÑÑ Ð² '''mail.jar'''. | |
− | + | Создадим каÑалог Ð´Ð»Ñ Ð¿ÑоекÑа ('''QuickMailer'''), в нем заведем подкаÑалог '''libs''' и положим ÑÑда ÑÑи два jar-Ñайла. ÐоÑом заведем дÑÑгой подкаÑалог ('''src'''), Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи иÑÑ
однÑÑ
ÑекÑÑов. | |
− | === | + | ===ÐкоÑки=== |
− | + | Сделаем окоÑко Ð´Ð»Ñ Ð¾ÑпÑавки ÑообÑениÑ. Ðно бÑÐ´ÐµÑ Ð¿ÑоÑÑое, как на ÑиÑ. 1. | |
− | [[ | + | [[ÐзобÑажение:LXF97_JAVA1.jpg|РиÑ. 1. Ðкно ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ оÑпÑавки ÑообÑений.]] |
− | + | ÐодÑобно ÑаÑÑказаÑÑ Ð¿Ñо Ñо, как ÑоздаÑÑÑÑ ÑоÑмÑ, не Ñ
ваÑÐ¸Ñ Ð¼ÐµÑÑа. Ðо пÑивеÑÑи код, ÑоздаÑÑий Ñакое окоÑко â запÑоÑÑо. | |
<source lang="java"> | <source lang="java"> | ||
Строка 64: | Строка 65: | ||
private JButton _buttonSend; | private JButton _buttonSend; | ||
public QuickMailerForm() throws HeadlessException { | public QuickMailerForm() throws HeadlessException { | ||
− | setTitle( | + | setTitle(âÐÑÑÑÑо ÐÑйлеÑâ); |
setDefaultCloseOperation(EXIT_ON_CLOSE); | setDefaultCloseOperation(EXIT_ON_CLOSE); | ||
createLayout(); | createLayout(); | ||
Строка 76: | Строка 77: | ||
</source> | </source> | ||
− | + | Ðак видно, клаÑÑ Ð½Ð°ÑледÑеÑÑÑ Ð¾Ñ '''JFrame''', ÑÑо окно пÑиложениÑ. ÐмееÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑоÑ, где Ð¾ÐºÐ½Ñ Ð¿ÑиÑваиваеÑÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº, ÑÑÑанавливаеÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¸ положение в ÑеÑедине ÑкÑана. Также еÑÑÑ Ð´Ð²Ðµ ÑÑнкÑии: пеÑÐ²Ð°Ñ ÑÐ¾Ð·Ð´Ð°ÐµÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ ('''createLayout'''), вÑоÑÐ°Ñ Â«Ð²ÐµÑаеÑ» на ÐºÐ½Ð¾Ð¿ÐºÑ ÐÑпÑавиÑÑ Ð¾Ð±ÑабоÑÑик ÑобÑÑиÑ, коÑоÑÑй ÑобиÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸ вÑзÑÐ²Ð°ÐµÑ Ð¼ÐµÑод оÑпÑавки поÑÑÑ. | |
− | + | ÐÐ¾Ñ ÐºÐ°Ðº ÑоздаÑÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ ÑоÑмÑ: | |
<source lang="java"> | <source lang="java"> | ||
private void createLayout() { | private void createLayout() { | ||
JPanel labelsPanel = new JPanel(new GridLayout(2, 1)); | JPanel labelsPanel = new JPanel(new GridLayout(2, 1)); | ||
− | labelsPanel.add(new JLabel( | + | labelsPanel.add(new JLabel(âEMail полÑÑаÑелÑ:â, JLabel.RIGHT)); |
− | labelsPanel.add(new JLabel( | + | labelsPanel.add(new JLabel(âТема пиÑÑма:â, JLabel.RIGHT)); |
JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); | JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); | ||
− | _buttonSend = new JButton( | + | _buttonSend = new JButton(âÐÑпÑавиÑÑâ); |
buttonsPanel.add(_buttonSend); | buttonsPanel.add(_buttonSend); | ||
JPanel fieldsPanel = new JPanel(new GridLayout(2, 1)); | JPanel fieldsPanel = new JPanel(new GridLayout(2, 1)); | ||
Строка 97: | Строка 98: | ||
controlsPanel.add(fieldsPanel, BorderLayout.CENTER); | controlsPanel.add(fieldsPanel, BorderLayout.CENTER); | ||
JPanel mainPanel = new JPanel(new BorderLayout(5, 5)); | JPanel mainPanel = new JPanel(new BorderLayout(5, 5)); | ||
− | _message = new JEditorPane( | + | _message = new JEditorPane(âtext/rtfâ, ââ); |
mainPanel.add(controlsPanel, BorderLayout.NORTH); | mainPanel.add(controlsPanel, BorderLayout.NORTH); | ||
mainPanel.add(new JScrollPane(_message), BorderLayout.CENTER); | mainPanel.add(new JScrollPane(_message), BorderLayout.CENTER); | ||
Строка 106: | Строка 107: | ||
</source> | </source> | ||
− | + | ÐкÑаÑÑе, здеÑÑ ÑоздаеÑÑÑ Ð½ÐµÑколÑко панелей, вложеннÑÑ
дÑÑг в дÑÑга. ЧÑÐ¾Ð±Ñ Ð²ÑглÑдело полÑÑÑе, задаÑÑÑÑ Ð¾ÑÑÑÑÐ¿Ñ Ð¸ межкомпоненÑнÑе ÑаÑÑÑоÑниÑ. | |
− | + | ÐоÑледний меÑод â Ñоздание обÑабоÑÑика ÑобÑÑÐ¸Ñ Ð½Ð°Ð¶Ð°ÑÐ¸Ñ Ð½Ð° кнопкÑ: | |
<source lang="java"> | <source lang="java"> | ||
Строка 115: | Строка 116: | ||
public void actionPerformed(ActionEvent e) { | public void actionPerformed(ActionEvent e) { | ||
try { | try { | ||
− | QuickMailer.sendMessage( | + | QuickMailer.sendMessage(âalex@jdnevnik.comâ, _fieldTo.getText(), _fieldSubject.getText(), |
_message.getDocument().getText(0, _message.getDocument().getLength())); | _message.getDocument().getText(0, _message.getDocument().getLength())); | ||
} catch (Exception e1) { | } catch (Exception e1) { | ||
Строка 125: | Строка 126: | ||
</source> | </source> | ||
− | + | ТÑÑ Ð²Ñе доÑÑаÑоÑно пÑоÑÑо. ÐÑÑаÑкиваÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¸ÑÑма из полей, поÑле Ñего вÑзÑваеÑÑÑ Ð½ÐµÐºÐ¸Ð¹ меÑод '''sendMessage''', коÑоÑÑй Ð¼Ñ ÑейÑÐ°Ñ Ð¸ ÑаÑÑмоÑÑим подÑобнее. | |
− | === | + | ===СобÑÑвенно оÑпÑавка ÑообÑениÑ=== |
− | + | ÐÑедполагаеÑÑÑ, ÑÑо Ñ Ð²Ð°Ñ Ð½Ð° localhostâе наÑÑÑоен smtp-ÑеÑÐ²ÐµÑ (Ñ Ð¼ÐµÐ½Ñ ÑÑÐ¾Ð¸Ñ ''postfix''), либо еÑÑÑ Ð´Ð¾ÑÑÑп к какомÑ-Ñо дÑÑÐ³Ð¾Ð¼Ñ (коÑоÑÑй не ÑÑебÑÐµÑ Ð°Ð²ÑоÑизаÑии: Ñ Ð½ÐµÐ¹ ÑазбиÑаÑÑÑÑ Ð¿Ð¾ÐºÐ° не бÑдем). | |
− | + | ÐÐ»Ñ Ð½Ð°Ñала Ñоздадим адÑеÑа оÑпÑавиÑÐµÐ»Ñ Ð¸ полÑÑаÑелÑ: | |
<source lang="java"> | <source lang="java"> | ||
public static void sendMessage(String aFrom, String aTo, String aSubject, | public static void sendMessage(String aFrom, String aTo, String aSubject, | ||
String aMessageText) throws Exception { | String aMessageText) throws Exception { | ||
− | InternetAddress from = new InternetAddress(aFrom, | + | InternetAddress from = new InternetAddress(aFrom, âFromâ); |
− | InternetAddress to = new InternetAddress(aTo, | + | InternetAddress to = new InternetAddress(aTo, âToâ); |
</source> | </source> | ||
− | + | ТепеÑÑ Ð½Ñжно наÑÑÑоиÑÑ Ñак назÑваемÑй ÑÑанÑпоÑÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑÑÑ Ð¾ÑпÑавкой ÑообÑениÑ. | |
<source lang="java"> | <source lang="java"> | ||
Properties props = new Properties(); | Properties props = new Properties(); | ||
− | props.put( | + | props.put(âmail.transport.protocolâ, âsmtpâ); |
− | props.put( | + | props.put(âmail.smtp.hostâ, âlocalhostâ); |
− | props.put( | + | props.put(âmail.smtp.portâ, â25â); |
Session session = Session.getDefaultInstance(props); | Session session = Session.getDefaultInstance(props); | ||
Transport transport = session.getTransport(); | Transport transport = session.getTransport(); | ||
</source> | </source> | ||
− | + | ТепеÑÑ â Ñоздадим Ñамо ÑообÑение. | |
<source lang="java"> | <source lang="java"> | ||
Строка 157: | Строка 158: | ||
message.setFrom(from); | message.setFrom(from); | ||
message.setRecipient(Message.RecipientType.TO, to); | message.setRecipient(Message.RecipientType.TO, to); | ||
− | message.setSubject(aSubject, | + | message.setSubject(aSubject, âutf-8â); |
− | message.setContent(aMessageText, | + | message.setContent(aMessageText, âtext/plain; charset=utf-8â); |
</source> | </source> | ||
− | + | Ð, наконеÑ, оÑоÑлем пиÑÑмо. | |
<source lang="java"> | <source lang="java"> | ||
Строка 170: | Строка 171: | ||
</source> | </source> | ||
− | + | Ðак можно замеÑиÑÑ, вÑе пÑеделÑно пÑоÑÑо и понÑÑно â но иÑклÑÑиÑелÑно поÑомÑ, ÑÑо Ñам пÑÐ¸Ð¼ÐµÑ Ð¿ÑоÑÑой. СиÑÑема доÑÑаÑоÑно моÑнаÑ, ÑÑÐ¾Ð±Ñ ÑпÑавиÑÑÑÑ Ð¸ Ñ Ð°Ð²ÑоÑизаÑией, и Ñ ÑообÑениÑми на ÑазнÑÑ
ÑзÑкаÑ
, и Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми Ñайлов. | |
− | === | + | ===СобиÑаем вÑе вмеÑÑе=== |
− | + | ÐÑÑалоÑÑ ÑолÑко напиÑаÑÑ Ð¼ÐµÑод, коÑоÑÑй бÑÐ´ÐµÑ Ð²Ñе ÑÑо запÑÑкаÑÑ. | |
<source lang="java"> | <source lang="java"> | ||
Строка 183: | Строка 184: | ||
</source> | </source> | ||
− | + | У Ð¼ÐµÐ½Ñ Ð¿Ð¾Ñле напиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° полÑÑилоÑÑ Ð´Ð²Ð° Ñайла, '''QuickMailer.java''' и '''QuickMailerForm.java'''. СкомпилиÑÑем иÑ
(вÑполнив, наÑ
одÑÑÑ Ð² каÑалоге, в коÑоÑом наÑ
одиÑÑÑ '''src''' и '''libs'''): | |
<code> | <code> | ||
Строка 189: | Строка 190: | ||
</code> | </code> | ||
− | + | ÐбÑаÑиÑе внимание на ÑаÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿Ð¾Ñле '''-cp'''. ÐÑо Ñказание компилÑÑоÑÑ, где иÑкаÑÑ Ð¸ÑполÑзÑемÑе в коде клаÑÑÑ, кÑоме ÑÑандаÑÑнÑÑ
. ЧаÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿Ð¾Ñле '''-d''' опÑеделÑÐµÑ ÐºÐ°Ñалог, кÑда бÑдÑÑ ÑкладÑваÑÑÑÑ ÑкомпилиÑованнÑе клаÑÑÑ. Ð, наконеÑ, Ñак как Ð¼Ñ Ñоздавали ÑÐ°Ð¹Ð»Ñ Ð² кодиÑовке UTF-8 (в ней пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¸ÑÑ
однÑе ÑекÑÑÑ Ð½Ð° диÑке), Ñо и в командной ÑÑÑоке ÑÑо нÑжно ÑказаÑÑ, инаÑе бÑÐ´ÐµÑ Ð²ÑбÑана кодиÑовка по ÑмолÑаниÑ, а ÑÑо не вÑегда веÑно. | |
− | + | ÐапÑÑÑим: | |
<code> | <code> | ||
Строка 199: | Строка 200: | ||
</code> | </code> | ||
− | + | Ðожно оÑпÑавлÑÑÑ Ð¿Ð¸ÑÑма. | |
− | === | + | ===РполÑÑиÑÑ?=== |
− | + | Ðа новое окоÑко меÑÑа Ñже не Ñ
ваÑиÑ. ÐгÑаниÑимÑÑ Ð¿ÑоÑмоÑÑом кода, коÑоÑÑй нÑжно напиÑаÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿Ð¸ÑÑмо, напÑимеÑ, по пÑоÑÐ¾ÐºÐ¾Ð»Ñ '''POP'''. | |
<source lang="java"> | <source lang="java"> | ||
Properties props = new Properties(); | Properties props = new Properties(); | ||
Session session = Session.getDefaultInstance(props, null); | Session session = Session.getDefaultInstance(props, null); | ||
− | Store store = session.getStore( | + | Store store = session.getStore(âpop3â); |
store.connect(aHost, aUserName, aPassword); | store.connect(aHost, aUserName, aPassword); | ||
− | Folder folder = store.getFolder( | + | Folder folder = store.getFolder(âINBOXâ); |
folder.open(Folder.READ_ONLY); | folder.open(Folder.READ_ONLY); | ||
Message message[] = folder.getMessages(); | Message message[] = folder.getMessages(); | ||
for (int i = 0, n = message.length; i < n; i++) { | for (int i = 0, n = message.length; i < n; i++) { | ||
− | System.out.println(i + | + | System.out.println(i + â: â + message[i].getFrom()[0] + â\tâ + message[i]. |
getSubject()); | getSubject()); | ||
} | } | ||
Строка 221: | Строка 222: | ||
</source> | </source> | ||
− | + | ÐаннÑй кÑÑок кода пÑоÑÑо вÑÐ²ÐµÐ´ÐµÑ ÑпиÑок вÑеÑ
пиÑем на ÑеÑвеÑе. | |
− | === | + | ===ÐÑ, а еÑли не мÑдÑиÑÑâ¦=== |
− | + | ÐÑÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¸ попÑоÑе. ÐÑли пÑогÑамма ÑабоÑÐ°ÐµÑ Ñ Ð¿Ð¾ÑÑой акÑивно, можно иÑполÑзоваÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð½Ð°ÑиÑ
поÑÑоÑннÑÑ
дÑÑзей из ''apache-commons''. ÐазÑваеÑÑÑ Ð¾Ð½Ð° '''commons-email''', и ее ÑÑÑаниÑка ÑаÑполагаеÑÑÑ Ð¿Ð¾ адÑеÑÑ http://commons.apache.org/email/. СкаÑав библиоÑекÑ, положим ÐµÑ Ð² '''libs''', к '''mail.jar''' и компании. ТепеÑÑ Ð¿Ð¾Ð¿ÑобÑем оÑпÑавиÑÑ Ð¿Ð¸ÑÑмо Ñ ÐµÐµ помоÑÑÑ: | |
<source lang="java"> | <source lang="java"> | ||
Строка 231: | Строка 232: | ||
String aSubject, String aMessageText) throws EmailException { | String aSubject, String aMessageText) throws EmailException { | ||
SimpleEmail email = new SimpleEmail(); | SimpleEmail email = new SimpleEmail(); | ||
− | email.setHostName( | + | email.setHostName(âlocalhostâ); |
− | email.setFrom(aFrom, | + | email.setFrom(aFrom, âFromâ); |
− | email.addTo(aTo, | + | email.addTo(aTo, âToâ); |
email.setSubject(aSubject); | email.setSubject(aSubject); | ||
email.setMsg(aMessageText); | email.setMsg(aMessageText); | ||
Строка 240: | Строка 241: | ||
</source> | </source> | ||
− | + | ÐаÑколÑко вÑе пÑоÑе и понÑÑнее ÑÑÐ°Ð·Ñ ÑÑало! РеÑли нÑжно Ñайл пÑиложиÑÑ? Ðа пожалÑйÑÑа: | |
<source lang="java"> | <source lang="java"> | ||
Строка 246: | Строка 247: | ||
String aSubject, String aMessageText) throws EmailException { | String aSubject, String aMessageText) throws EmailException { | ||
EmailAttachment attachment = new EmailAttachment(); | EmailAttachment attachment = new EmailAttachment(); | ||
− | attachment.setPath( | + | attachment.setPath(âattachments/attachment.zipâ); |
attachment.setDisposition(EmailAttachment.ATTACHMENT); | attachment.setDisposition(EmailAttachment.ATTACHMENT); | ||
− | attachment.setDescription( | + | attachment.setDescription(âФайл-пÑиложение к пиÑÑмÑâ); |
− | attachment.setName( | + | attachment.setName(âattachment.zipâ); |
MultiPartEmail email = new MultiPartEmail(); | MultiPartEmail email = new MultiPartEmail(); | ||
− | email.setHostName( | + | email.setHostName(âlocalhostâ); |
− | email.setFrom(aFrom, | + | email.setFrom(aFrom, âFromâ); |
− | email.addTo(aTo, | + | email.addTo(aTo, âToâ); |
email.setSubject(aSubject); | email.setSubject(aSubject); | ||
email.setMsg(aMessageText); | email.setMsg(aMessageText); | ||
Строка 261: | Строка 262: | ||
</source> | </source> | ||
− | + | ÐдеÑÑ Ñоже ниÑего Ñложного неÑ. СоздаÑÑ Ð¿Ñиложение в пиÑÑме можно и иÑполÑзÑÑ ÑолÑко '''JavaMail''', но Ñам ÑÑо полÑÑаеÑÑÑ Ð´Ð¾ÑÑаÑоÑно непÑоÑÑо, и длиннее Ñаза в ÑÑи-ÑеÑÑÑе. | |
− | === | + | ===ÐÑо Ñпам=== |
− | + | ÐонеÑно, ÑабоÑа Ñ Ð¿Ð¾ÑÑой не Ñак пÑоÑÑа, как ÑÑо оÑÑажено в ÑÑаÑÑе. ÐÑÑÑ Ð¸ пÑоблема Ñпама (а Ð´Ð»Ñ Ð¿ÑогÑаммно оÑпÑавлÑемÑÑ
ÑообÑений â пÑоблема Ñого, ÑÑо оно Ñ Ð±Ð¾Ð»ÑÑой веÑоÑÑноÑÑÑÑ Ð¿Ð¾ÑÑиÑаеÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñпамом), и пÑоблема коÑÑекÑноÑÑи. SMTP-пÑоÑокол, в ÑаÑÑноÑÑи, доÑÑаÑоÑно ÑÑаÑÑй, и Ñам много неÑоÑноÑÑей, неÑвнÑÑ
пÑавил и Ñак далее. РобÑем, Ñо, ÑÑо еÑÑÑ '''JavaMail''' â ÑÑо оÑлиÑно, и она оÑÐµÐ½Ñ ÑилÑно Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¿Ñи ÑабоÑе Ñ Ð¿Ð¾ÑÑовÑми ÑообÑениÑми, но панаÑеей Ñем не менее не ÑвлÑеÑÑÑ. ÐÑе Ñавно нÑжно пÑедÑÑавлÑÑÑ Ñебе, как ÑабоÑÐ°ÐµÑ Ð¿ÑоÑокол, какие заголовки нÑжно ÑÑавиÑÑ, как обÑабаÑÑваÑÑ ÑообÑÐµÐ½Ð¸Ñ ÑазнÑе поÑÑовÑе клиенÑÑ (ÑÑÐ¾Ð±Ñ Ð¿Ð¸ÑÑмо ноÑмалÑно Ñам показÑвалоÑÑ, а не кÑÑкозÑбÑами) и много Ñего еÑе. | |
− | + | Ðо вÑе же, надеÑÑÑ, ÑепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ не боÑÑÑÑÑ ÑÑÑаÑнÑÑ
бÑквеннÑÑ
ÑоÑеÑаний, ÑвÑзаннÑÑ
Ñ Ð¿Ð¾ÑÑой, и Ñпокойно вÑÑÑаиваÑÑ Ð² пÑоÑÐ°Ð¼Ð¼Ñ ÐµÑе одно ÑдобнейÑее ÑÑедÑÑво коммÑникаÑии: ÑлекÑÑоннÑе пиÑÑма. '''LXF''' |
Версия 01:09, 22 мая 2009
|
|
|
http://www.textervart.com Шаблон:Цикл/Java EE ÐаÑегоÑиÑ:УÑебники
ÐоÑÑовÑй ÑеÑвиÑ
СкаÑаÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñй код пÑимеÑа
- ЧÐСТЬ 9 ХоÑиÑе оÑнаÑÑиÑÑ ÑÐ²Ð¾Ñ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð¿Ð¸ÑаÑÑ Â«Ð½Ð° деÑÐµÐ²Ð½Ñ Ð´ÐµÐ´ÑÑке»? ÐлекÑÐ°Ð½Ð´Ñ Ðабаев Ð·Ð½Ð°ÐµÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑее ÑÑедÑÑво.
ÐеÑмоÑÑÑ Ð½Ð° заÑилÑе бÑаÑзеÑа в ÑеÑии, JEE им не огÑаниÑиваеÑÑÑ. ÐавайÑе попÑобÑем поÑÑлаÑÑ Ð¿Ð¸ÑÑма из Java (Ð²ÐµÐ´Ñ ÐºÐ°Ð¶Ð´Ð°Ñ Ñ
оÑоÑÐ°Ñ Ð¿ÑогÑамма должна ÑмеÑÑ ÑообÑаÑÑ ÑазÑабоÑÑикам об оÑибкаÑ
), и Ñделаем ÑÑо пÑиложение не бÑаÑзеÑнÑм, а «обÑÑнÑм».
ÐоÑоÑко о поÑÑе
ЧÑÐ¾Ð±Ñ ÑабоÑаÑÑ Ñ Ð¿Ð¾ÑÑой, нÑжно ÑмеÑÑ ÐµÑ Ð¾ÑпÑавлÑÑÑ Ð¸ полÑÑаÑÑ. ÐÑи попÑÑке ÑазобÑаÑÑÑÑ Ð² ÑÑом Ð²Ñ Ð½Ð°ÑкнеÑеÑÑ Ð½Ð° ÑледÑÑÑие бÑквоÑоÑеÑÐ°Ð½Ð¸Ñ (Ñ ÑазнÑми ваÑиаÑиÑми): SMTP, POP, IMAP. РаÑÑмоÑÑим кÑаÑко, ÑÑо ÑÑо Ñакое и как ÑÑим полÑзоваÑÑÑÑ (а Ñакже где поÑиÑаÑÑ Ð¿Ð¾Ð¿Ð¾Ð´Ñобнее).
- SMTP
ÐÑи помоÑи Simple Mail Transfer Protocol (пÑоÑÑого пÑоÑокола пеÑедаÑи поÑÑÑ) поÑÑа пеÑедаеÑÑÑ Ñ ÐºÐ»Ð¸ÐµÐ½Ñа на ÑеÑвеÑ. ÐÑпÑавлÑеÑÑÑ Ñо еÑÑÑ. ÐÑоÑокол ÑекÑÑовÑй, и еÑли еÑÑÑ Ð¶ÐµÐ»Ð°Ð½Ð¸Ðµ, можно оÑпÑавлÑÑÑ Ð¿Ð¸ÑÑма пÑÑмо из telnetâа.
- POP
Тоже ÑекÑÑовÑй пÑоÑокол, но Ñже не Ð´Ð»Ñ Ð¿ÐµÑедаÑи, а Ð´Ð»Ñ Ð¿Ñиема ÑообÑений. ÐÐ¾Ð¶ÐµÑ Ð²ÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¿Ð¾ поÑÑÐ¾Ð²Ð¾Ð¼Ñ ÑÑÐ¸ÐºÑ (ÑколÑко ÑообÑений, какой Ð¸Ñ ÑазмеÑ), загÑÑзиÑÑ ÑообÑение по номеÑÑ Ð¸ Ñак далее.
- IMAP
POP пÑедполагаеÑ, ÑÑо поÑÑа ÑкаÑиваеÑÑÑ Ð½Ð° ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸ Ñам Ñже ÑаÑкладÑваеÑÑÑ Ð¿Ð¾ папкам, обÑабаÑÑваеÑÑÑ, гÑÑппиÑÑеÑÑÑ. ÐÑи ÑÑом Ñ ÑеÑвеÑа ÑообÑÐµÐ½Ð¸Ñ ÑÑиÑаÑÑÑÑ. ÐÑо не вÑегда Ñдобно. Ðак Ñаз Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑÑ Ð½Ð° ÑеÑвеÑе Ñоздан пÑоÑокол IMAP. Ðак и пÑедÑдÑÑие два, он ÑекÑÑовÑй. Ðо Ñ ÐµÐ³Ð¾ помоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ не ÑолÑко полÑÑиÑÑ ÑообÑениÑ, но и ÑоздаÑÑ Ð½Ð° ÑеÑвеÑе папкÑ, пеÑемеÑÑиÑÑ Ð¿Ð¸ÑÑмо кÑда-нибÑдÑ, подпиÑаÑÑÑÑ Ð½Ð° полÑÑение изменений (новÑÑ Ð¿Ð¸Ñем) в папке, и Ñак далее.
- GoogleMail/HotMail/â¦
Ðо и ÑÑо не вÑÑ. ÐÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¿ÑоÑоколами, но некоÑоÑÑе ÑеÑвиÑÑ ÑабоÑаÑÑ Â«Ð¿Ð¾-ÑвоемÑ». РеÑли GoogleMail пÑедоÑÑавлÑÐµÑ POP-инÑеÑÑейÑ, Ñо Hotmail, напÑимеÑ, неÑ. Ð Ñаком ÑлÑÑае обÑÑно еÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо Ñвой, неÑÑандаÑÑнÑй пÑоÑокол.
ÐÑого
РиÑоге полÑÑаеÑÑÑ, ÑÑо ÑазнÑÑ Ð¿ÑоÑоколов много-много (ÑÑо не ÑÑиÑÐ°Ñ Ð²Ð°ÑианÑов и нÑанÑов, комбинаÑий коÑоÑÑÑ ÑоÑни). Ð ÑÑÐ¾Ð±Ñ Ð¿Ð¾-ÑеловеÑеÑки вÑе ÑÑо обÑабаÑÑваÑÑ, пÑиÑлоÑÑ Ð¿Ð¸ÑаÑÑ Ð±Ñ Ð¾Ð³Ñомное колиÑеÑÑво кода. РпоÑом его оÑлаживаÑÑ⦠ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑÑно, ÑаÑÑмаÑÑÐ¸Ð²Ð°Ñ ÑеÑевÑе пÑиложениÑ, оÑпÑавкÑ/полÑÑение пиÑем Ð¾Ð±Ñ Ð¾Ð´ÑÑ ÑÑоÑоной. ÐейÑÑвиÑелÑно, заÑем? ÐÐ¾Ð¼Ñ Ð½Ñжно, и Ñак ÑазбеÑеÑÑÑ.
Ðо в Java, как вÑегда, Ñже позабоÑилиÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ ÑпÑоÑÑиÑÑ Ð¶Ð¸Ð·Ð½Ñ ÑеловекÑ, коÑоÑÐ¾Ð¼Ñ Ð½Ñжно ÑаÑÑÑлаÑÑ Ð¿Ð¸ÑÑма â позабоÑилиÑÑ Ð½Ð° Ñамом вÑÑÑем ÑÑовне (в Sun Microsystems) и доÑÑаÑоÑно каÑеÑÑвенно.
Ргде волÑÐµÐ±Ð½Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°?
ÐÑÑÑ ÑÐ°ÐºÐ°Ñ Ð·Ð°Ð¼ÐµÑаÑелÑÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека, JavaMail. Ðна доÑÑаÑоÑно кÑÑÐ¿Ð½Ð°Ñ (224 килобайÑа ÑолÑко JAR-Ñайл), заÑо и ÑÐ¼ÐµÐµÑ Ð¾ÑÐµÐ½Ñ Ð¼Ð½Ð¾Ð³Ð¾. Ð Ñего не ÑÐ¼ÐµÐµÑ â можно наÑÑиÑÑ, благо аÑÑ Ð¸ÑекÑÑÑа наÑÑÑаиваемаÑ. ÐавайÑе поÑмоÑÑим, как Ñ Ð½ÐµÐ¹ ÑабоÑаÑÑ.
ÐодгоÑовка
ÐÐ»Ñ Ð½Ð°Ñала ÑкаÑаем ÑÐ°Ð¼Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекÑ. СÑÑаниÑка пÑодÑкÑа Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð¿Ð¾ адÑеÑÑ http://java.sun.com/products/javamail/; ÑкаÑиваÑÑ Ð½Ñжно, как водиÑÑÑ, поÑледний Ñелиз (1.4). Также понадобиÑÑÑ JavaBeans Activation Framework (JAF), коÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ загÑÑзиÑÑ Ñо ÑÑÑаниÑки ÑÑдом: http://java.sun.com/products/javabeans/jaf/index.jsp.
ÐоÑле загÑÑзки и ÑазаÑÑ Ð¸Ð²Ð¸ÑованиÑ, полÑÑаем две библиоÑеки: mail.jar и activation.jar. ÐеÑÐ²Ð°Ñ Ð¸Ð· Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð²Ñе возможнÑе пÑоÑоколÑ, поÑÑÐ¾Ð¼Ñ ÑÐ°Ð·Ð¼ÐµÑ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑаÑоÑно внÑÑиÑелÑнÑй. ÐÑли ÑÑо-Ñо из ÑÑого многообÑÐ°Ð·Ð¸Ñ Ð²Ð°Ð¼ не нÑжно, можно воÑполÑзоваÑÑÑÑ ÑÑезаннÑми веÑÑиÑми, они Ñакже ÑодеÑжаÑÑÑ Ð² mail.jar.
Создадим каÑалог Ð´Ð»Ñ Ð¿ÑоекÑа (QuickMailer), в нем заведем подкаÑалог libs и положим ÑÑда ÑÑи два jar-Ñайла. ÐоÑом заведем дÑÑгой подкаÑалог (src), Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи иÑÑ Ð¾Ð´Ð½ÑÑ ÑекÑÑов.
ÐкоÑки
Сделаем окоÑко Ð´Ð»Ñ Ð¾ÑпÑавки ÑообÑениÑ. Ðно бÑÐ´ÐµÑ Ð¿ÑоÑÑое, как на ÑиÑ. 1. РиÑ. 1. Ðкно ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ оÑпÑавки ÑообÑений.
ÐодÑобно ÑаÑÑказаÑÑ Ð¿Ñо Ñо, как ÑоздаÑÑÑÑ ÑоÑмÑ, не Ñ Ð²Ð°ÑÐ¸Ñ Ð¼ÐµÑÑа. Ðо пÑивеÑÑи код, ÑоздаÑÑий Ñакое окоÑко â запÑоÑÑо.
import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class QuickMailerForm extends JFrame { private JTextField _fieldTo; private JTextField _fieldSubject; private JEditorPane _message; private JButton _buttonSend; public QuickMailerForm() throws HeadlessException { setTitle(âÐÑÑÑÑо ÐÑйлеÑâ); setDefaultCloseOperation(EXIT_ON_CLOSE); createLayout(); createActions(); pack(); setSize(700, 560); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setLocation((int) (screenSize.getWidth() - 700)/2, (int) ((screenSize.getHeight() - 560)/2)); } }
Ðак видно, клаÑÑ Ð½Ð°ÑледÑеÑÑÑ Ð¾Ñ JFrame, ÑÑо окно пÑиложениÑ. ÐмееÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑоÑ, где Ð¾ÐºÐ½Ñ Ð¿ÑиÑваиваеÑÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº, ÑÑÑанавливаеÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¸ положение в ÑеÑедине ÑкÑана. Также еÑÑÑ Ð´Ð²Ðµ ÑÑнкÑии: пеÑÐ²Ð°Ñ ÑÐ¾Ð·Ð´Ð°ÐµÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ (createLayout), вÑоÑÐ°Ñ Â«Ð²ÐµÑаеÑ» на ÐºÐ½Ð¾Ð¿ÐºÑ ÐÑпÑавиÑÑ Ð¾Ð±ÑабоÑÑик ÑобÑÑиÑ, коÑоÑÑй ÑобиÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸ вÑзÑÐ²Ð°ÐµÑ Ð¼ÐµÑод оÑпÑавки поÑÑÑ.
ÐÐ¾Ñ ÐºÐ°Ðº ÑоздаÑÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ ÑоÑмÑ:
private void createLayout() { JPanel labelsPanel = new JPanel(new GridLayout(2, 1)); labelsPanel.add(new JLabel(âEMail полÑÑаÑелÑ:â, JLabel.RIGHT)); labelsPanel.add(new JLabel(âТема пиÑÑма:â, JLabel.RIGHT)); JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); _buttonSend = new JButton(âÐÑпÑавиÑÑâ); buttonsPanel.add(_buttonSend); JPanel fieldsPanel = new JPanel(new GridLayout(2, 1)); _fieldTo = new JTextField(); _fieldSubject = new JTextField(); fieldsPanel.add(_fieldTo); fieldsPanel.add(_fieldSubject); JPanel controlsPanel = new JPanel(new BorderLayout(5, 5)); controlsPanel.add(labelsPanel, BorderLayout.WEST); controlsPanel.add(fieldsPanel, BorderLayout.CENTER); JPanel mainPanel = new JPanel(new BorderLayout(5, 5)); _message = new JEditorPane(âtext/rtfâ, ââ); mainPanel.add(controlsPanel, BorderLayout.NORTH); mainPanel.add(new JScrollPane(_message), BorderLayout.CENTER); mainPanel.add(buttonsPanel, BorderLayout.SOUTH); mainPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(mainPanel); }
ÐкÑаÑÑе, здеÑÑ ÑоздаеÑÑÑ Ð½ÐµÑколÑко панелей, вложеннÑÑ Ð´ÑÑг в дÑÑга. ЧÑÐ¾Ð±Ñ Ð²ÑглÑдело полÑÑÑе, задаÑÑÑÑ Ð¾ÑÑÑÑÐ¿Ñ Ð¸ межкомпоненÑнÑе ÑаÑÑÑоÑниÑ.
ÐоÑледний меÑод â Ñоздание обÑабоÑÑика ÑобÑÑÐ¸Ñ Ð½Ð°Ð¶Ð°ÑÐ¸Ñ Ð½Ð° кнопкÑ:
private void createActions() { _buttonSend.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { QuickMailer.sendMessage(âalex@jdnevnik.comâ, _fieldTo.getText(), _fieldSubject.getText(), _message.getDocument().getText(0, _message.getDocument().getLength())); } catch (Exception e1) { e1.printStackTrace(); } } }); }
ТÑÑ Ð²Ñе доÑÑаÑоÑно пÑоÑÑо. ÐÑÑаÑкиваÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¸ÑÑма из полей, поÑле Ñего вÑзÑваеÑÑÑ Ð½ÐµÐºÐ¸Ð¹ меÑод sendMessage, коÑоÑÑй Ð¼Ñ ÑейÑÐ°Ñ Ð¸ ÑаÑÑмоÑÑим подÑобнее.
СобÑÑвенно оÑпÑавка ÑообÑениÑ
ÐÑедполагаеÑÑÑ, ÑÑо Ñ Ð²Ð°Ñ Ð½Ð° localhostâе наÑÑÑоен smtp-ÑеÑÐ²ÐµÑ (Ñ Ð¼ÐµÐ½Ñ ÑÑÐ¾Ð¸Ñ postfix), либо еÑÑÑ Ð´Ð¾ÑÑÑп к какомÑ-Ñо дÑÑÐ³Ð¾Ð¼Ñ (коÑоÑÑй не ÑÑебÑÐµÑ Ð°Ð²ÑоÑизаÑии: Ñ Ð½ÐµÐ¹ ÑазбиÑаÑÑÑÑ Ð¿Ð¾ÐºÐ° не бÑдем).
ÐÐ»Ñ Ð½Ð°Ñала Ñоздадим адÑеÑа оÑпÑавиÑÐµÐ»Ñ Ð¸ полÑÑаÑелÑ:
public static void sendMessage(String aFrom, String aTo, String aSubject, String aMessageText) throws Exception { InternetAddress from = new InternetAddress(aFrom, âFromâ); InternetAddress to = new InternetAddress(aTo, âToâ);
ТепеÑÑ Ð½Ñжно наÑÑÑоиÑÑ Ñак назÑваемÑй ÑÑанÑпоÑÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑÑÑ Ð¾ÑпÑавкой ÑообÑениÑ.
Properties props = new Properties(); props.put(âmail.transport.protocolâ, âsmtpâ); props.put(âmail.smtp.hostâ, âlocalhostâ); props.put(âmail.smtp.portâ, â25â); Session session = Session.getDefaultInstance(props); Transport transport = session.getTransport();
ТепеÑÑ â Ñоздадим Ñамо ÑообÑение.
MimeMessage message = new MimeMessage(session); message.setFrom(from); message.setRecipient(Message.RecipientType.TO, to); message.setSubject(aSubject, âutf-8â); message.setContent(aMessageText, âtext/plain; charset=utf-8â);
Ð, наконеÑ, оÑоÑлем пиÑÑмо.
transport.connect(); transport.sendMessage(message, new Address[]{to}); transport.close(); }
Ðак можно замеÑиÑÑ, вÑе пÑеделÑно пÑоÑÑо и понÑÑно â но иÑклÑÑиÑелÑно поÑомÑ, ÑÑо Ñам пÑÐ¸Ð¼ÐµÑ Ð¿ÑоÑÑой. СиÑÑема доÑÑаÑоÑно моÑнаÑ, ÑÑÐ¾Ð±Ñ ÑпÑавиÑÑÑÑ Ð¸ Ñ Ð°Ð²ÑоÑизаÑией, и Ñ ÑообÑениÑми на ÑазнÑÑ ÑзÑÐºÐ°Ñ , и Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми Ñайлов.
СобиÑаем вÑе вмеÑÑе
ÐÑÑалоÑÑ ÑолÑко напиÑаÑÑ Ð¼ÐµÑод, коÑоÑÑй бÑÐ´ÐµÑ Ð²Ñе ÑÑо запÑÑкаÑÑ.
public static void main(String[] args) { QuickMailerForm form = new QuickMailerForm(); form.setVisible(true); }
У Ð¼ÐµÐ½Ñ Ð¿Ð¾Ñле напиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° полÑÑилоÑÑ Ð´Ð²Ð° Ñайла, QuickMailer.java и QuickMailerForm.java. СкомпилиÑÑем Ð¸Ñ (вÑполнив, Ð½Ð°Ñ Ð¾Ð´ÑÑÑ Ð² каÑалоге, в коÑоÑом Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ src и libs):
javac -cp libs/activation.jar:libs/commons-email-1.0.jar:libs/mail.jar -encoding utf-8 -d out src/*.java
ÐбÑаÑиÑе внимание на ÑаÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿Ð¾Ñле -cp. ÐÑо Ñказание компилÑÑоÑÑ, где иÑкаÑÑ Ð¸ÑполÑзÑемÑе в коде клаÑÑÑ, кÑоме ÑÑандаÑÑнÑÑ . ЧаÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿Ð¾Ñле -d опÑеделÑÐµÑ ÐºÐ°Ñалог, кÑда бÑдÑÑ ÑкладÑваÑÑÑÑ ÑкомпилиÑованнÑе клаÑÑÑ. Ð, наконеÑ, Ñак как Ð¼Ñ Ñоздавали ÑÐ°Ð¹Ð»Ñ Ð² кодиÑовке UTF-8 (в ней пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ñе ÑекÑÑÑ Ð½Ð° диÑке), Ñо и в командной ÑÑÑоке ÑÑо нÑжно ÑказаÑÑ, инаÑе бÑÐ´ÐµÑ Ð²ÑбÑана кодиÑовка по ÑмолÑаниÑ, а ÑÑо не вÑегда веÑно.
ÐапÑÑÑим:
cd out java -cp .:../libs/activation.jar:../libs/commons-email-1.0.jar:../libs/mail.jar QuickMailer
Ðожно оÑпÑавлÑÑÑ Ð¿Ð¸ÑÑма.
РполÑÑиÑÑ?
Ðа новое окоÑко меÑÑа Ñже не Ñ Ð²Ð°ÑиÑ. ÐгÑаниÑимÑÑ Ð¿ÑоÑмоÑÑом кода, коÑоÑÑй нÑжно напиÑаÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿Ð¸ÑÑмо, напÑимеÑ, по пÑоÑÐ¾ÐºÐ¾Ð»Ñ POP.
Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); Store store = session.getStore(âpop3â); store.connect(aHost, aUserName, aPassword); Folder folder = store.getFolder(âINBOXâ); folder.open(Folder.READ_ONLY); Message message[] = folder.getMessages(); for (int i = 0, n = message.length; i < n; i++) { System.out.println(i + â: â + message[i].getFrom()[0] + â\tâ + message[i]. getSubject()); } folder.close(false); store.close();
ÐаннÑй кÑÑок кода пÑоÑÑо вÑÐ²ÐµÐ´ÐµÑ ÑпиÑок вÑÐµÑ Ð¿Ð¸Ñем на ÑеÑвеÑе.
ÐÑ, а еÑли не мÑдÑиÑÑâ¦
ÐÑÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¸ попÑоÑе. ÐÑли пÑогÑамма ÑабоÑÐ°ÐµÑ Ñ Ð¿Ð¾ÑÑой акÑивно, можно иÑполÑзоваÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð½Ð°ÑÐ¸Ñ Ð¿Ð¾ÑÑоÑннÑÑ Ð´ÑÑзей из apache-commons. ÐазÑваеÑÑÑ Ð¾Ð½Ð° commons-email, и ее ÑÑÑаниÑка ÑаÑполагаеÑÑÑ Ð¿Ð¾ адÑеÑÑ http://commons.apache.org/email/. СкаÑав библиоÑекÑ, положим ÐµÑ Ð² libs, к mail.jar и компании. ТепеÑÑ Ð¿Ð¾Ð¿ÑобÑем оÑпÑавиÑÑ Ð¿Ð¸ÑÑмо Ñ ÐµÐµ помоÑÑÑ:
public static void sendMessageCommonsEMail(String aFrom, String aTo, String aSubject, String aMessageText) throws EmailException { SimpleEmail email = new SimpleEmail(); email.setHostName(âlocalhostâ); email.setFrom(aFrom, âFromâ); email.addTo(aTo, âToâ); email.setSubject(aSubject); email.setMsg(aMessageText); email.send(); }
ÐаÑколÑко вÑе пÑоÑе и понÑÑнее ÑÑÐ°Ð·Ñ ÑÑало! РеÑли нÑжно Ñайл пÑиложиÑÑ? Ðа пожалÑйÑÑа:
public static void sendMessageWithAttachment(String aFrom, String aTo, String aSubject, String aMessageText) throws EmailException { EmailAttachment attachment = new EmailAttachment(); attachment.setPath(âattachments/attachment.zipâ); attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription(âФайл-пÑиложение к пиÑÑмÑâ); attachment.setName(âattachment.zipâ); MultiPartEmail email = new MultiPartEmail(); email.setHostName(âlocalhostâ); email.setFrom(aFrom, âFromâ); email.addTo(aTo, âToâ); email.setSubject(aSubject); email.setMsg(aMessageText); email.attach(attachment); email.send(); }
ÐдеÑÑ Ñоже ниÑего Ñложного неÑ. СоздаÑÑ Ð¿Ñиложение в пиÑÑме можно и иÑполÑзÑÑ ÑолÑко JavaMail, но Ñам ÑÑо полÑÑаеÑÑÑ Ð´Ð¾ÑÑаÑоÑно непÑоÑÑо, и длиннее Ñаза в ÑÑи-ÑеÑÑÑе.
ÐÑо Ñпам
ÐонеÑно, ÑабоÑа Ñ Ð¿Ð¾ÑÑой не Ñак пÑоÑÑа, как ÑÑо оÑÑажено в ÑÑаÑÑе. ÐÑÑÑ Ð¸ пÑоблема Ñпама (а Ð´Ð»Ñ Ð¿ÑогÑаммно оÑпÑавлÑемÑÑ ÑообÑений â пÑоблема Ñого, ÑÑо оно Ñ Ð±Ð¾Ð»ÑÑой веÑоÑÑноÑÑÑÑ Ð¿Ð¾ÑÑиÑаеÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñпамом), и пÑоблема коÑÑекÑноÑÑи. SMTP-пÑоÑокол, в ÑаÑÑноÑÑи, доÑÑаÑоÑно ÑÑаÑÑй, и Ñам много неÑоÑноÑÑей, неÑвнÑÑ Ð¿Ñавил и Ñак далее. РобÑем, Ñо, ÑÑо еÑÑÑ JavaMail â ÑÑо оÑлиÑно, и она оÑÐµÐ½Ñ ÑилÑно Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¿Ñи ÑабоÑе Ñ Ð¿Ð¾ÑÑовÑми ÑообÑениÑми, но панаÑеей Ñем не менее не ÑвлÑеÑÑÑ. ÐÑе Ñавно нÑжно пÑедÑÑавлÑÑÑ Ñебе, как ÑабоÑÐ°ÐµÑ Ð¿ÑоÑокол, какие заголовки нÑжно ÑÑавиÑÑ, как обÑабаÑÑваÑÑ ÑообÑÐµÐ½Ð¸Ñ ÑазнÑе поÑÑовÑе клиенÑÑ (ÑÑÐ¾Ð±Ñ Ð¿Ð¸ÑÑмо ноÑмалÑно Ñам показÑвалоÑÑ, а не кÑÑкозÑбÑами) и много Ñего еÑе.
Ðо вÑе же, надеÑÑÑ, ÑепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ не боÑÑÑÑÑ ÑÑÑаÑнÑÑ Ð±ÑквеннÑÑ ÑоÑеÑаний, ÑвÑзаннÑÑ Ñ Ð¿Ð¾ÑÑой, и Ñпокойно вÑÑÑаиваÑÑ Ð² пÑоÑÐ°Ð¼Ð¼Ñ ÐµÑе одно ÑдобнейÑее ÑÑедÑÑво коммÑникаÑии: ÑлекÑÑоннÑе пиÑÑма. LXF