-
Wen es interessiert hier der lauffähige Code.
Bin aber bereits am Probieren, das mit dem AppServer zu machen.
Code:
H main(Main)
H dftactgrp(*no)
H actgrp(*new)
**********************************************************************
* newString constructor that accepts a byte array
* (an alphnumeric variable in RPG speak). It
* returns a string object.
**********************************************************************
D newString PR O ExtProc(*JAVA:
D 'java.lang.String':
D *CONSTRUCTOR)
D Class(*JAVA:'java.lang.String')
D byes 9999A Const Varying
D sendMail PR EXTPROC(*JAVA : 'javaMail.JavaMail+
D ' : 'sendMail' )
D STATIC
D arg0 O CLASS(*JAVA : 'java.lang.String' )
D arg1 O CLASS(*JAVA : 'java.lang.String' )
D arg2 O CLASS(*JAVA : 'java.lang.String' )
D arg3 O CLASS(*JAVA : 'java.lang.String' )
D sendMailMitAnhang...
D PR EXTPROC(*JAVA : 'javaMail.JavaMail+
D ' : 'sendMailMitAnhang' )
D STATIC
D arg0 O CLASS(*JAVA : 'java.lang.String' )
D arg1 O CLASS(*JAVA : 'java.lang.String' )
D arg2 O CLASS(*JAVA : 'java.lang.String' )
D arg3 O CLASS(*JAVA : 'java.lang.String' )
D arg4 O DIM(99)
D CLASS(*JAVA : 'java.lang.String' )
D OPTIONS(*VARSIZE)
D absender S O CLASS(*JAVA : 'java.lang.String' )
D empfaenger S O CLASS(*JAVA : 'java.lang.String' )
D betreff S O CLASS(*JAVA : 'java.lang.String' )
D nachricht S O CLASS(*JAVA : 'java.lang.String' )
D dateien S O DIM(99)
D CLASS(*JAVA : 'java.lang.String' )
DMain PR extpgm('TEST')
PMain B
D PI
/free
absender = newString('absender@test.local');
empfaenger = newString('empfaenger@test.local');
betreff = newString('Test');
nachricht = newString('Datei-Test');
dateien(1) = newString('/Java/JavaMail.jar');
dateien(2) = newString('/Java/activation.jar');
dateien(3) = newString('/Java/mail.jar');
sendMail(absender:empfaenger:betreff:nachricht);
sendMailMitAnhang(
absender:empfaenger:betreff:nachricht:dateien);
dsply ('Ende');
/end-free
P E
Code:
package javaMail;
import java.io.File;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class JavaMail {
public static void main(String[] args) {
String absender = args[0];
String empfaenger = args[1];
String betreff = args[2];
String nachricht = args[3];
String[] dateien = new String[1];
dateien[0] = args[4];
sendMail(absender, empfaenger, betreff, nachricht);
sendMailMitAnhang(
absender, empfaenger, betreff,
nachricht, dateien);
}
public static void sendMailMitAnhang(
String absender, String empfaenger, String betreff,
String nachricht, String[] dateien)
{
File[] files = new File[dateien.length];
for (int i=0; i<dateien.length; i++)
{
if (dateien[i]!=null)
{
files[i] = new File(dateien[i]);
}
}
try {
Properties props=new Properties();
props.put("mail.smtp.host","IP-Adresse Mail Server");
Session session = Session.getInstance(props);
Message message=new MimeMessage(session);
message.setFrom(new InternetAddress(absender));
message.setRecipient(
Message.RecipientType.TO,
new InternetAddress(empfaenger));
message.setSubject(betreff);
Multipart multipart = new MimeMultipart();
BodyPart body = new MimeBodyPart();
body.setText(nachricht);
multipart.addBodyPart(body);
for (int i=0; i<files.length; i++)
{
if (files[i]!=null)
{
BodyPart file = new MimeBodyPart();
DataSource source = new FileDataSource(files[i]);
file.setDataHandler(new DataHandler(source));
file.setFileName(files[i].getName());
multipart.addBodyPart(file);
}
}
message.setContent(multipart);
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
public static void sendMail(
String absender, String empfaenger,
String betreff, String nachricht)
{
try {
Properties props=new Properties();
props.put("mail.smtp.host","IP-Adresse Mail Server");
Session session = Session.getInstance(props);
Message message=new MimeMessage(session);
message.setFrom(new InternetAddress(absender));
message.setRecipient(
Message.RecipientType.TO,
new InternetAddress(empfaenger));
message.setSubject(betreff);
Multipart multipart = new MimeMultipart();
BodyPart body = new MimeBodyPart();
body.setText(nachricht);
multipart.addBodyPart(body);
message.setContent(multipart);
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
-
ClassNotFoundException: de.bender_dv.sqlgateway.application.Confirmer
Moin Dieter,
ich habe den AppServer4RPG soweit eingerichtet und erstmal in einer QShell gestartet.
Beim Call des Test-Programms kommt dann die Fehlermeldung:
ClassNotFoundException: de.bender_dv.sqlgateway.application.Confirmer
Ich hab mal in die jar-Datei geguckt und die Klasse und sogar der ganze Ornder sqlgateway ist nicht vorhanden. Soll das so, damit das extra auf einen Fehler läuft?
-
... ne das soll nicht so, da ist wahrscheinlich der Eintrag in der global.properties inkonsistent mit dem Rest; ändere den mal auf de.bender_dv.test.Confirmer ab, dann sollte das Testteil tun. Hat aber mit der Funktionalität des AppServers nix zu tun.
Was dein RPG Teil angeht, das mit dem static zieht, weil dann kein Objekt erzeugt werden muss. Eigentlich würde man mit deiner Java class analog zu String verfahren, sprich einen *Constructor deklarieren und vor dem Methodenaufruf mit diesem das Object erzeugen, das dann beim Methodenaufruf als erster Parameter mitgegeben wird.
D*B
 Zitat von Ottersberg
Moin Dieter,
ich habe den AppServer4RPG soweit eingerichtet und erstmal in einer QShell gestartet.
Beim Call des Test-Programms kommt dann die Fehlermeldung:
ClassNotFoundException: de.bender_dv.sqlgateway.application.Confirmer
Ich hab mal in die jar-Datei geguckt und die Klasse und sogar der ganze Ornder sqlgateway ist nicht vorhanden. Soll das so, damit das extra auf einen Fehler läuft?
-
 Zitat von BenderD
... ne das soll nicht so, da ist wahrscheinlich der Eintrag in der global.properties inkonsistent mit dem Rest; ändere den mal auf de.bender_dv.test.Confirmer ab, dann sollte das Testteil tun. Hat aber mit der Funktionalität des AppServers nix zu tun.
Ja das hat geklappt.
Ich habe jetzt entsprechend eigene Klassen erstellt und das klappt alles wunderbar.
Ich komme allerdings an die 512 Byte-Grenze. Eine E-Mail braucht mehr und wenn ich Dateien anhängen will, bin ich mit den Dateipfaden erst recht schnell an dieser Grenze.
So wie es aussieht stammt die Grenze ja von der Klasse com.ibm.as400.access.Record her. Habe ich überhaupt eine Chance das zu vergrößern? Oder muss ich mich komplett selbst um die übergebenen Variablen kümmern?
[edit]
Nehm ich zurück. Es kommen gar nicht erst mehr als 512 Byte an oder besser 532 (20 für den Event). Warum die Einschränkung auf 532? Die DataQueue kann doch 64512 Bytes.
Warum der com.ibm.as400.access.Record dann allerdings bei 512 Bytes eine IndexOutOfBoundsException wirft ist ne andere Frage.
[/edit]
-
Hallo,
die Begrenzung ist willkuerlich, aus Performancegruenden ist es wohl nicht so gut zuviel Luft zu senden. Der momentane Arbeitsstand (im CVS im SourceForge) hat eine zusaetzliche Procedure, die paketiert das Ganze.
D*B
 Zitat von Ottersberg
Ja das hat geklappt.
Ich habe jetzt entsprechend eigene Klassen erstellt und das klappt alles wunderbar.
Ich komme allerdings an die 512 Byte-Grenze. Eine E-Mail braucht mehr und wenn ich Dateien anhängen will, bin ich mit den Dateipfaden erst recht schnell an dieser Grenze.
So wie es aussieht stammt die Grenze ja von der Klasse com.ibm.as400.access.Record her. Habe ich überhaupt eine Chance das zu vergrößern? Oder muss ich mich komplett selbst um die übergebenen Variablen kümmern?
[edit]
Nehm ich zurück. Es kommen gar nicht erst mehr als 512 Byte an oder besser 532 (20 für den Event). Warum die Einschränkung auf 532? Die DataQueue kann doch 64512 Bytes.
Warum der com.ibm.as400.access.Record dann allerdings bei 512 Bytes eine IndexOutOfBoundsException wirft ist ne andere Frage.
[/edit]
Similar Threads
-
By Vicky-B in forum NEWSboard Java
Antworten: 17
Letzter Beitrag: 06-05-08, 12:05
-
By PGMR in forum NEWSboard Java
Antworten: 10
Letzter Beitrag: 10-02-05, 11:33
-
By PGMR in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 02-02-05, 14:10
-
By mk in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 09-09-04, 09:22
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks