Отправка почты из приложения
Данный пример очень прост, но и имеет массу недоработок, взять например, то что из textarea может браться текст с символами перехода на другую строку, а smtp-сервер их не переварит (надо их заменить на /r/n). Также необходима проверка вводимого e-mail адреса и т.п.
Пример поможет Вам понять как создавать Java приложения использующие SMTP протокол.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
public class MainFrame extends JFrame
{
XYLayout layout = new XYLayout();
JTextField nameText = new JTextField();
JTextField emailText = new JTextField();
JTextArea messageText = new JTextArea();
JButton button1 = new JButton("Отправить");
JButton button2 = new JButton("Очистить");
private static PrintStream ps = null;//Поток вывода
private static DataInputStream dis = null;//Поток ввода
public MainFrame()
{
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try
{
initmf();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void initmf() throws Exception
{
this.setSize(new Dimension(400, 300));
this.setTitle("Frame Title");
this.getContentPane().setLayout(layout);
nameText.setText("Ваше имя");
emailText.setText("Ваш E-mail");
messageText.setText("Текст сообщения");
messageText.setBorder(nameText.getBorder());
this.getContentPane().add(nameText, new XYConstraints(5, 5, 300, 20));
this.getContentPane().add(emailText, new XYConstraints(5, 30, 300, 20));
this.getContentPane().add(messageText, new XYConstraints(5, 60, 380, 160));
this.getContentPane().add(button1, new XYConstraints(5, 230, 0, 0));
this.getContentPane().add(button2, new XYConstraints(120, 230, 0, 0));
button1.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
button1_mouseClicked(e);
}
});
button2.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
button2_mouseClicked(e);
}
});
}
protected void processWindowEvent(WindowEvent e)
{
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING)
{
System.exit(0);
}
}
void button1_mouseClicked(MouseEvent e)
{
String hello = "HELO ";
String mail_from ="MAIL FROM: ";
String rcpt_to ="RCPT TO: ";
String data ="DATA";
String subject ="SUBJECT: Message from site";
String body ="\r\n От: "+nameText.getText()+" E-mail: "+
emailText.getText()+"\r\n"+messageText.getText()+"\r\n.\r\n";
// Сокет
Socket smtp = null;
// Порт SMTP службы 25
int port = 25;
try
{
smtp = new Socket("mail.valuehost.ru", port);
OutputStream os = smtp.getOutputStream();
ps = new PrintStream(os);
InputStream is = smtp.getInputStream();
dis = new DataInputStream(is);
}
catch (IOException ee)
{
System.out.println("Error connecting: " + ee);
}
try
{
String loc = InetAddress.getLocalHost().getHostName();
send(hello + loc);
receive();
send(mail_from);
receive();
send(rcpt_to);
receive();
send(data);
receive();
send(subject);
receive();
send(body);
receive();
System.out.println("Mail send!");
}
catch (IOException ee)
{
System.out.println("Error sending:" + e);
}
finally
{
if (smtp != null)
try
{
smtp.close();
} catch (IOException ee)
{
}
}
}
void button2_mouseClicked(MouseEvent e)
{
nameText.setText("");
emailText.setText("");
messageText.setText("");
}
//Пишет данные в поток
private static void send(String str)throws IOException
{
ps.println(str);
ps.flush();
System.out.println("Java sent: " + str);
}
//Читает данные из потока
private static void receive() throws IOException
{
String readstr = dis.readLine();
System.out.println("SMTP response: " + readstr);
}
}
Jar-архив




Узнай о чем ты на самом деле сейчас думаешь

