Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Java i mail

3 views
Skip to first unread message

Pawel Gajda

unread,
Jan 19, 1998, 3:00:00 AM1/19/98
to

Czy z poziomu apletu lub aplikaacji Javy (1.0 lub 1.1) istnieje
jakaś możliwość wysłania poczty elektronicznej?
A może mi się tylko marzy? :-)

--
Paweł Gajda ** Power on the highway
student Wiedzy Tajemnej **** Data in my head
**** Surfing on the network
** Part of me is dead

Artur Biesiadowski

unread,
Jan 19, 1998, 3:00:00 AM1/19/98
to

Pawel Gajda <pa...@euler.mat.univ.szczecin.pl> wrote:
> Czy z poziomu apletu lub aplikaacji Javy (1.0 lub 1.1) istnieje
> jakaś możliwość wysłania poczty elektronicznej?
> A może mi się tylko marzy? :-)

Normalnie trzeba to robic recznie. W tej chwili jest dostepna jakas
implementcja JavaMail - sprawdz http://developer.javasoft.com

Artur

Pawel Grotowski

unread,
Jan 19, 1998, 3:00:00 AM1/19/98
to

Artur Biesiadowski wrote:
>
> Pawel Gajda <pa...@euler.mat.univ.szczecin.pl> wrote:
> > Czy z poziomu apletu lub aplikaacji Javy (1.0 lub 1.1) istnieje
> > jaka możliwo ć wysłania poczty elektronicznej?

> > A może mi się tylko marzy? :-)
>
> Normalnie trzeba to robic recznie. W tej chwili jest dostepna jakas
> implementcja JavaMail - sprawdz http://developer.javasoft.com

Co to znaczy "zrobic recznie" ? Sluze gotowym kodem; robile
juz cos takiego.
Poza tym, wystarczy sciagnac ze stron IBM'a pakiet firmy
Taligent, Inc. z wiekszej calosci o nazwie WebRunner Toolkit,
w ktorym zaimplementowano wazniejsze protokoly, czyli
FTP, SMTP, POP3, NNTP. Masz tam wszystko to, czego potrzebujesz
kompleksowo rozwiazane. Oczywiscie jest to wersja ewaluacyjna
na wlasny uzytek, ale dziala niezle.

Oto wspomniany adres:

http://www.taligent.com/Products/webrunner/resources/WRBeans.html

Nazywa sie to "Network Beans".

p.g.

Pawel Gajda

unread,
Jan 20, 1998, 3:00:00 AM1/20/98
to

Pawel Grotowski <paw...@bitbank.net.pl> wrote:
> Co to znaczy "zrobic recznie" ? Sluze gotowym kodem; robile
> juz cos takiego.
> Poza tym, wystarczy sciagnac ze stron IBM'a pakiet firmy
> Taligent, Inc. z wiekszej calosci o nazwie WebRunner Toolkit,
> w ktorym zaimplementowano wazniejsze protokoly, czyli
> FTP, SMTP, POP3, NNTP. Masz tam wszystko to, czego potrzebujesz
> kompleksowo rozwiazane. Oczywiscie jest to wersja ewaluacyjna
> na wlasny uzytek, ale dziala niezle.

Też chciałbym wiedzieć, co to znaczy zrobić ręcznie.
Czy mógłbyś przesłać ten kod (może być na grupę - inni niech też popatrzą)
W moim pierwszym pytaniu chodziło o to czy da się to zrobić bez korzystania
z dodatkowych bibliotek, zwłaszcza komercyjnych.

> Oto wspomniany adres:

> http://www.taligent.com/Products/webrunner/resources/WRBeans.html

> Nazywa sie to "Network Beans".

Dzięki zajrzę tam.

> p.g.

Pozdrawiam

Artur Biesiadowski

unread,
Jan 20, 1998, 3:00:00 AM1/20/98
to

> Pawel Grotowski <paw...@bitbank.net.pl> wrote:
> > Co to znaczy "zrobic recznie" ? Sluze gotowym kodem; robile
> > juz cos takiego.

> Też chciałbym wiedzieć, co to znaczy zrobić ręcznie.
To znaczy polaczys sie z serverem port 25, wyslac FROM i inne rzeczy i
zakonczyc polaczenie. (patrz RFC ilestam). To jest dla mnie robienie tego
recznie w odroznieniu od korzystania z gotowej biblioteki z klasami w
ktorych robisz mail.setFromHeader("bla...@usa.net");

> Czy mógłbyś przesłać ten kod (może być na grupę - inni niech też popatrzą)

To nie do mnie.

> W moim pierwszym pytaniu chodziło o to czy da się to zrobić bez korzystania
> z dodatkowych bibliotek, zwłaszcza komercyjnych.

javax.mail nie jest komercyjna - mozna z niej korzystac za darmo.
A jezeli chodzi ci bez bibliotek w ogolnosci to kod ktory podesle ci pan
Pawel to tez bedzie swego rodzaju biblioteka czyz nie ?
Alternatywa jest zawsze new Socket("server", 25);

Artur


Pawel Grotowski

unread,
Jan 21, 1998, 3:00:00 AM1/21/98
to

> Czy mógłby przesłać ten kod (może być na grupę - inni niech też popatrzš)

Przesylam => najpierw plik SendMail.java
Jako Reply do tego postingu wysylam SendMailApplet.java

********************************************************
* Oto wspomniany kod klasy wysylajacej poczte *
********************************************************

// Poczatek kodu
import java.net.*;
import java.io.*;
import java.util.*;

// __________________________________________________________________
//
// SendMail.java
// Copyright (c) Pawel Grotowski
// paw...@bitbank.net.pl
//
// Klasa SendMail sluzy do wysylania poczty elektronicznej
// pod zadany adres.
//
// Napisana zostala na podstawie dokumentu RFC821
// "Simple Mail Transfer Protocol", Postel, J.B.; 1982
//
// Aby otrzymac oryginal dokumentu wyslij na adres
// ser...@nic.dd.mil poczte w ktorej temat bedzie numerem
// pozadanego dokumentu RFC, w tym przypadku RFC821.
//
// INSTRUKCJA OBSLUGI:
//
// 1. Nalezy utworzyc instancje klasy dyrektywa new, w argumencie
// podajac adresu hostu z ktorego poczta jest wysylana i adres
// zwrotny. Najczesciej bedzie to tak:
//
// SendMail sm = new SendMail(getDocumentBase().getHost(), email);
//
// 2. Nastepnie trzeba wyslac dane w formacia ASCII:
//
// sm.sendMessage("us...@domena.pl", "Temat", "Tekst przesyłki");
// __________________________________________________________________
//
class SendMail
{
private String host;
private String returnAddress;
private Socket socket;
private DataInputStream input;
private PrintStream output;

private static int PORT = 25;

/**
* konstruktor
*
*/
SendMail(String host, String returnAddress)
{
this.host = host;
this.returnAddress = returnAddress;
}

/**
* otwarcie połšczenia
*
*/
private void openSocket() throws Exception
{
try {
socket = new Socket(host, PORT);
System.out.println(socket.toString());

} catch(Exception e) {
throw new Exception("BŁĽD: Połšczenie z hostem nie jest możliwe");
}
}

/**
* otwarcie standardowego wej cia dla danych
*
*/
private void openInputStream() throws Exception
{
try {
input = new DataInputStream(socket.getInputStream());
} catch(Exception e) {
throw new Exception("BŁĽD: Niemożliwe otwarcie wej cia");
}
}

/**
* otwarcie standardowego wyj cia
*
*/
private void openOutputStream() throws Exception
{
try {
output = new PrintStream(socket.getOutputStream());
} catch(Exception e) {
throw new Exception("BŁĽD: Niemożliwe otwarcie wyj cia");
}
}

/**
* wysłanie danych
*
*/
private void sendData(String recipient, String subject, String msg)
throws Exception
{
try {
sendLine("HELO " + InetAddress.getLocalHost().toString());
sendLine("MAIL FROM:<" + returnAddress + ">");
sendLine("RCPT TO:<" + recipient + ">");
sendLine("SEND FROM:<" + returnAddress + ">");

// dane
sendLine("DATA");
sendLine("Subject: " + subject);

/*
* analiza tekstu wysyłanego komunikatu. Je li zostanie napotkany
* znak '.' musi on być zamieniony na cišg '..' ponieważ kropka
* oznacza zakończenie komunikatu.
*
*/
DataInputStream is = new DataInputStream(new
StringBufferInputStream(msg));

try {
while(is.available() > 0) {
String line = is.readLine();
if (line.equals(".")) {
line = "..";
}
sendLine(line);
}
} catch(IOException e) {
}

// zakończenie sesji
sendLine("\r\n");
sendLine(".");
sendLine("QUIT");

} catch(Exception e) {
throw new Exception("BŁĽD: Wysłanie danych nie jest możliwe");
}
}

/**
* wysłanie linii do serwera poczty
*
*/
public void sendLine(String data)
{
output.print(data + "\r\n");
System.out.println("send : " + data);
}

/**
* wysłanie poczty pod zadany adres
*
* recipient - adres eMail
* subject - temat
* msg - wysyłany tekst
*
*/
public void sendMessage(String recipient, String subject, String msg)
throws Exception
{
try {
openSocket();
openOutputStream();
//openInputStream(); // bez potwierdzenia odbioru
sendData(recipient, subject, msg);
} catch(Exception e) {
throw new Exception("BŁĽD: Wysłanie wiadomo ci nie jest możliwe");
}
finally {
if (socket != null) {
socket.close();
}
}
}
}
// Koniec kodu

p.g.

--
URL: http://www.bitbank.net.pl/pawelg eMail: paw...@bitbank.net.pl
======================================================================
PGP public key http://www.bitbank.net.pl/pawelg/my_pgp_key/PUBRING.asc
PGP key fingerprint = FE 19 52 8D F8 94 FD 0F 9B 9B 8E 4B 05 7F 53 A9

Pawel Grotowski

unread,
Jan 21, 1998, 3:00:00 AM1/21/98
to

> Jako Reply do postingu wyzej wysylam SendMailApplet.java

*********************************************************
* Kod appletu wysylajacego poczte ze strony WWW *
* Wykorzystuje klase SendMail i HexConverter. *
* HexConterter nie jest zamieszczony w tym listingu! *
*********************************************************

// Poczatek kodu
import java.applet.*;
import java.net.*;
import java.util.*;
import java.awt.*;

import SendMail;
import HexConverter;

// __________________________________________________________________
//
// Formularz do wypełnienia danymi głosujšcego
//


// Copyright (c) Pawel Grotowski
// paw...@bitbank.net.pl

// __________________________________________________________________
//
class MailForm extends Panel
{
private SendMailApplet applet;

public TextField name = null;
public TextField email = null;
public TextField age = null;
public TextField city = null;
public TextField country = null;
public Button button = null;
public String buttonDesc = null;

/**
* konstruktor
*/
MailForm
(
SendMailApplet ap,
String nameDesc,
String emailDesc,
String ageDesc,
String cityDesc,
String countryDesc,
String buttonDesc,
Color colorPanel
)
{
applet = ap;

Label label;

GridBagConstraints gbc = new GridBagConstraints();
GridBagLayout gbl = new GridBagLayout();

// ustalenia czcionki dla okna i przycisku

Font font = new Font("Arial", Font.BOLD, 16);
Font bttn = new Font("Arial", Font.BOLD, 24);

// ustalenie koloru pól dialogowych

Color textFieldColor = new Color(colorPanel.getRed() - 95,
colorPanel.getGreen() - 95,
colorPanel.getBlue() - 95);

setLayout(gbl);

gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.NONE;

// imię i nazwisko

label = new Label(nameDesc);
label.setFont(font);
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.EAST;
gbl.setConstraints(label, gbc);
add(label);

name = new TextField(20);
name.setFont(font);
name.setBackground(textFieldColor);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints(name, gbc);
add(name);

// email

label = new Label(emailDesc);
label.setFont(font);
gbc.insets = new Insets(4,0,0,0);
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.EAST;
gbl.setConstraints(label, gbc);
add(label);

email = new TextField(20);
email.setFont(font);
email.setBackground(textFieldColor);
gbc.insets = new Insets(4,0,0,0);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints(email, gbc);
add(email);

// wiek

label = new Label(ageDesc);
label.setFont(font);
gbc.insets = new Insets(4,0,0,0);
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.EAST;
gbl.setConstraints(label, gbc);
add(label);

age = new TextField(3);
age.setFont(font);
age.setBackground(textFieldColor);
gbc.insets = new Insets(4,0,0,0);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints(age, gbc);
add(age);

// miasto

label = new Label(cityDesc);
label.setFont(font);
gbc.insets = new Insets(4,0,0,0);
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.EAST;
gbl.setConstraints(label, gbc);
add(label);

city = new TextField(20);
city.setFont(font);
city.setBackground(textFieldColor);
gbc.insets = new Insets(4,0,0,0);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints(city, gbc);
add(city);

// narodowo ć

label = new Label(countryDesc);
label.setFont(font);
gbc.insets = new Insets(4,0,0,0);
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.EAST;
gbl.setConstraints(label, gbc);
add(label);

country = new TextField(20);
country.setFont(font);
country.setBackground(textFieldColor);
gbc.insets = new Insets(4,0,0,0);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.WEST;
gbl.setConstraints(country, gbc);
add(country);

// przycisk wy lij

this.buttonDesc = buttonDesc;
button = new Button(buttonDesc);
button.setFont(bttn);
gbc.insets = new Insets(20,0,0,0);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.CENTER;
gbl.setConstraints(button, gbc);
add(button);

validate();

setBackground(colorPanel);
}
}

// __________________________________________________________________
//
// SendMailApplet.java


// Copyright (c) Pawel Grotowski
// paw...@bitbank.net.pl

// __________________________________________________________________
//
public final class SendMailApplet extends Applet implements Runnable
{
MailForm mailForm = null;
Thread sendMailThread = null;
String recipient = null;
String subject = null;
String message = null;
String buttonDesc = null;
String msgWindowName = null;
String nameErrorDoc = null;
String ageErrorDoc = null;
String socketErrorDoc = null;
String sendOkDoc = null;

// nazwy parametrów wej ciowych

private final static String paramName[] = {
"NameDesc",
"EmailDesc",
"AgeDesc",
"CityDesc",
"CountryDesc",
"ButtonDesc",
"BgColor",
"Recipient",
"Subject",
"Message",
"MsgWindowName",
"NameErrorEvent",
"AgeErrorEvent",
"SocketErrorEvent",
"SendOkEvent"
};

// ilo ć opisów elementów kontrolnych formularza

private final static int DESCNUM = 6;

/**
* uruchomienie appletu
*/
public void run()
{
}

/**
* zainicjowanie appletu
*/
public void init()
{
try {
parseArguments();
} catch(NoSuchElementException e) {
}
}

/**
* włšczenie wštku
*/
public void start()
{
sendMailThread = new Thread(this);
sendMailThread.start();
}

/**
* wyłšczenie wštku
*/
public void stop()
{
sendMailThread.stop();
sendMailThread = null;
}

/**
* wy wietlenie grafiki
*/
public void paint(Graphics g)
{
mailForm.paint(g);
}

/**
* od wieżenie grafiki
*/
public void update(Graphics g)
{
paint(g);
}

/**
* metoda wywoływana przy wystšpieniu zdarzenia
*/
public boolean action(Event evt, Object obj)
{

if (mailForm != null) {
if (obj.equals(mailForm.buttonDesc))
{
String name = mailForm.name.getText();
String email = mailForm.email.getText();
String age = mailForm.age.getText();
String city = mailForm.city.getText();
String country = mailForm.country.getText();

// sprawdzenie czy wszyskie pola formularza sš wypełnione

if ((name .length() == 0) ||
(age .length() == 0) ||
(city .length() == 0) ||
(country.length() == 0))
{
showDocument(nameErrorDoc, msgWindowName);
return true;
}

// sprawdzenie wieku

int ageValue = Integer.parseInt(age.trim());

if (ageValue < 18 || ageValue > 100)
{
showDocument(ageErrorDoc, msgWindowName);
return true;
}

mailForm.button.disable();

// sporzšdzenie pełnej informacji

String fullInfo = "Imie i nazwisko osoby glosujacej...: <" +
name + ">\n" +
"E-mail.............................: <" +
email + ">\n" +
"Wiek...............................: <" +
age + ">\n" +
"Miasto.............................: <" +
city + ">\n" +
"Kraj...............................: <" +
country + ">\n" +
"\n" + message;

// sprawdzenie czy adres email jest poprawny

if (email.indexOf("@") == (-1) || email.length() == 0)
{
try {
email = InetAddress.getLocalHost().getHostName();
} catch(Exception e) {
}
}

/****************************************************************************************************/
// wysłanie danych
try {
SendMail sendmail = new SendMail(getDocumentBase().getHost(),
email);
sendmail.sendMessage(recipient, subject, fullInfo);
// wy wietlenie dokumentu 'SendOkEvent' po poprawnym
// wysłaniu poczty
showDocument(sendOkDoc, msgWindowName);
} catch(Exception e) {
showDocument(socketErrorDoc, msgWindowName);
}
/****************************************************************************************************/
}
}
return true;
}

/**
* wy wietlenie dokumentu informujšcego o stanie głosowania
*/
private void showDocument(String doc, String window)
{
try {
getAppletContext().showDocument(new URL(getDocumentBase(), doc),
msgWindowName);
} catch(Exception e) {
}
}

/**
* rozpoznanie argumentów appletu
*/
private void parseArguments() throws NoSuchElementException
{
String param;
Color color;

// kolor tła

param = getParameter(paramName[DESCNUM]);
if (param == null) {
color = Color.gray;
} else {
color = new Color(new HexConverter().hexToDec(param));
}

// adres docelowy

param = getParameter(paramName[DESCNUM + 1]);
if (param == null) {
throw new NoSuchElementException("Brak adresu docelowego");
} else {
recipient = param;
}

// temat

param = getParameter(paramName[DESCNUM + 2]);
if (param == null) {
subject = "<NONE>";
} else {
subject = param;
}

// tekst wiadomo ci

param = getParameter(paramName[DESCNUM + 3]);
if (param == null || param.equals("null")) {
message = "\n\n <KONIEC WIADOMOSCI>";
} else {
message = param;
}

// nazwa okna przeglšdarki w którym będš się pojawiać komunikaty
zwrotne

param = getParameter(paramName[DESCNUM + 4]);
if (param == null) {
msgWindowName = "_self";
} else {
msgWindowName = param;
}

// dokument wywoływany przy złym wypełnieniu formularza

param = getParameter(paramName[DESCNUM + 5]);
if (param != null) {
nameErrorDoc = param;
}

// dokument wywoływany przy złym wieku głosujšcego

param = getParameter(paramName[DESCNUM + 6]);
if (param != null) {
ageErrorDoc = param;
}

// dokument wywoływany przy błędzie połšczenia z serwerem

param = getParameter(paramName[DESCNUM + 7]);
if (param != null) {
socketErrorDoc = param;
}

// dokument wywoływany po poprawnym głosowaniu

param = getParameter(paramName[DESCNUM + 8]);
if (param != null) {
sendOkDoc = param;
}

makeMailForm (color);
setBackground(color);
}

/**
* utworzenie formularza do głosowania
*/
private void makeMailForm(Color color)
{
String[] desc = new String[DESCNUM];

for(int i = 0; i < DESCNUM; i++) {
desc[i] = getParameter(paramName[i]);
if (desc[i] == null) {
throw new NoSuchElementException("Brak jednego z parametrów
opisowych elementu kontrolnego");
}
}

mailForm = new MailForm
(
this,
desc[0] + " ",
desc[1] + " ",
desc[2] + " ",
desc[3] + " ",
desc[4] + " ",
desc[5],
color
);
add(mailForm);

Pawel Gajda

unread,
Jan 21, 1998, 3:00:00 AM1/21/98
to

Pawel Grotowski <Pawel.G...@bitbank.net.pl> wrote:
>> Jako Reply do postingu wyzej wysylam SendMailApplet.java

Dzięki wielkie!

Naprawdę będzie co analizować :-).
Oto mi właśnie chodziło.

> p.g.

Pozdrawiam wylewnie

Pawel Gajda

unread,
Jan 21, 1998, 3:00:00 AM1/21/98
to

Artur Biesiadowski <ab...@sunrise.pg.gda.pl> wrote:
>> Pawel Grotowski <paw...@bitbank.net.pl> wrote:
>> > Co to znaczy "zrobic recznie" ? Sluze gotowym kodem; robile
>> > juz cos takiego.

>> Też chciałbym wiedzieć, co to znaczy zrobić ręcznie.
> To znaczy polaczys sie z serverem port 25, wyslac FROM i inne rzeczy i
> zakonczyc polaczenie. (patrz RFC ilestam). To jest dla mnie robienie tego
> recznie w odroznieniu od korzystania z gotowej biblioteki z klasami w
> ktorych robisz mail.setFromHeader("bla...@usa.net");

Dzięki za oświecenie! Teraz już jestem w stanie napisać coś takiego sam
(chyba).

>> Czy mógłbyś przesłać ten kod (może być na grupę - inni niech też popatrzą)
> To nie do mnie.

Oczywiście, że nie do Ciebie :-). Spojrzyj komu odpowiadałem.

>> W moim pierwszym pytaniu chodziło o to czy da się to zrobić bez korzystania
>> z dodatkowych bibliotek, zwłaszcza komercyjnych.
> javax.mail nie jest komercyjna - mozna z niej korzystac za darmo.
> A jezeli chodzi ci bez bibliotek w ogolnosci to kod ktory podesle ci pan
> Pawel to tez bedzie swego rodzaju biblioteka czyz nie ?
> Alternatywa jest zawsze new Socket("server", 25);

Jeszcze raz dziękuję za wskazówki, czasami trochę wolno kojarzę :-)

> Artur

Pozdrawiam

0 new messages