Ottersberg
09-06-10, 08:56
Moin,
Ziel des ganzen soll später mal ein RPG-Programm sein, in dem der Mitarbeiter bestimmte Dokumente auswählen kann und die er dann als Anhang einer E-Mail zugesendet bekommt und weiterleiten kann.
Zuerst wollte ich das per SNDDST machen, aber da kann man ja nur eine Datei im Anhang schicken. Dann wollte ich die Dateien zippen und dann per SNDDST verschicken.
Beim Suchen bin ich dann auf JavaMail gestoßen und hielt das für eine bessere Alternative. Aus dem RPG-Programm soll jetzt mein Java-Programm aufgerufen werden, dass dann die Erstellung und das Versenden der Mail übernimmt.
Inzwischen habe ich ein Test-Programm so weit runtergeschraubt, dass es erstmal eine E-Mail ohne Anhang schickt. Beim Aufruf des Programms kommt dann allerdings ein Fehler.
Wenn ich die main-Methode aktiviere und das Java-Programm über qsh aufrufe funktioniert es.
Sofern die Anweisung 80 im Fehler auf die Zeile im Java-Code verweist, ist das der Aufruf der Methode sendMail.
Kann mir jemand helfen?
Fehler:
Nachricht . . . : Anwendungsfehler. CEE9901 nicht überwacht durch QRNXUTIL
bei Anweisung 0000000080, Instruktion X'0000'.
Ursache . . . . : Die Anwendung wurde abnormal beendet, da eine Ausnahme
aufgetreten ist, die nicht behandelt wurde. Der Name des Programms, an das
die nicht behandelte Ausnahme gesendet wurde, ist QRNXUTIL QRNXJNI
chk_jni_excp. Das Programm wurde bei der/den HLL-Anweisung/en mit der/den
Nummer/n 0000000080 gestoppt, als die Nachricht gesendet wurde. Wird mehr
als eine Anweisungsnummer angezeigt, handelt es sich bei dem Programm um ein
optimiertes ILE-Programm. Durch die Optimierung kann keine einzelne
Anweisungsnummer festgelegt werden. Wird *N als Wert angezeigt, bedeutet
dies, dass ein reeller Wert nicht verfügbar war.
Joblog sagt:
Speicher-Offset X'00000000' oder X'00000000FFFFFFF0' liegt außerhalb der
aktuellen Grenze für Objekt P0258_859BOTTERSBERG704879.
Java-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.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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) {
// JavaMail mail = new JavaMail();
// String[] dateien = new String[2];
// dateien[0]="C:\\fpRedmon.log";
// dateien[1]="C:\\PC.ini";
// mail.sendMail(
// "absender@test.local", "empfaenger@test.local",
// "Test", "Datei-Test");
//// mail.sendMailMitAnhang(
// "absender@test.local", "empfaenger@test.local",
// "Test", "Datei-Test", dateien);
// }
public JavaMail() {
super();
}
public void sendMailMitAnhang(
String absender, String empfaenger, String betreff,
String nachricht, String[] dateien)
{
}
public void sendMail(
String absender, String empfaenger,
String betreff, String nachricht)
{
try {
Properties props=new Properties();
Authenticator auth=new MailAuthenticator();
props.put("mail.smtp.host","IP-Adresse");
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props, auth);
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();
}
}
class MailAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("Benutzer","Passwort");
}
}
}
RPG-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 javaMailSendMail...
D S O CLASS(*JAVA: 'javaMail.JavaMail' )
D sendMail PR EXTPROC(*JAVA : 'javaMail.JavaMail+
D ' : 'sendMail' )
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 javaMailSendMailMitAnhang...
D S O CLASS(*JAVA: 'javaMail.JavaMail' )
D sendMailMitAnhang...
D PR EXTPROC(*JAVA : 'javaMail.JavaMail+
D ' : 'sendMailMitAnhang' )
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' )
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');
sendMail(javaMailSendMail:absender:empfaenger:betr eff:nachricht);
//sendMailMitAnhang(
// javaMailObj:absender:empfaenger:betreff:nachricht: dateien);
/end-free
P E
Ziel des ganzen soll später mal ein RPG-Programm sein, in dem der Mitarbeiter bestimmte Dokumente auswählen kann und die er dann als Anhang einer E-Mail zugesendet bekommt und weiterleiten kann.
Zuerst wollte ich das per SNDDST machen, aber da kann man ja nur eine Datei im Anhang schicken. Dann wollte ich die Dateien zippen und dann per SNDDST verschicken.
Beim Suchen bin ich dann auf JavaMail gestoßen und hielt das für eine bessere Alternative. Aus dem RPG-Programm soll jetzt mein Java-Programm aufgerufen werden, dass dann die Erstellung und das Versenden der Mail übernimmt.
Inzwischen habe ich ein Test-Programm so weit runtergeschraubt, dass es erstmal eine E-Mail ohne Anhang schickt. Beim Aufruf des Programms kommt dann allerdings ein Fehler.
Wenn ich die main-Methode aktiviere und das Java-Programm über qsh aufrufe funktioniert es.
Sofern die Anweisung 80 im Fehler auf die Zeile im Java-Code verweist, ist das der Aufruf der Methode sendMail.
Kann mir jemand helfen?
Fehler:
Nachricht . . . : Anwendungsfehler. CEE9901 nicht überwacht durch QRNXUTIL
bei Anweisung 0000000080, Instruktion X'0000'.
Ursache . . . . : Die Anwendung wurde abnormal beendet, da eine Ausnahme
aufgetreten ist, die nicht behandelt wurde. Der Name des Programms, an das
die nicht behandelte Ausnahme gesendet wurde, ist QRNXUTIL QRNXJNI
chk_jni_excp. Das Programm wurde bei der/den HLL-Anweisung/en mit der/den
Nummer/n 0000000080 gestoppt, als die Nachricht gesendet wurde. Wird mehr
als eine Anweisungsnummer angezeigt, handelt es sich bei dem Programm um ein
optimiertes ILE-Programm. Durch die Optimierung kann keine einzelne
Anweisungsnummer festgelegt werden. Wird *N als Wert angezeigt, bedeutet
dies, dass ein reeller Wert nicht verfügbar war.
Joblog sagt:
Speicher-Offset X'00000000' oder X'00000000FFFFFFF0' liegt außerhalb der
aktuellen Grenze für Objekt P0258_859BOTTERSBERG704879.
Java-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.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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) {
// JavaMail mail = new JavaMail();
// String[] dateien = new String[2];
// dateien[0]="C:\\fpRedmon.log";
// dateien[1]="C:\\PC.ini";
// mail.sendMail(
// "absender@test.local", "empfaenger@test.local",
// "Test", "Datei-Test");
//// mail.sendMailMitAnhang(
// "absender@test.local", "empfaenger@test.local",
// "Test", "Datei-Test", dateien);
// }
public JavaMail() {
super();
}
public void sendMailMitAnhang(
String absender, String empfaenger, String betreff,
String nachricht, String[] dateien)
{
}
public void sendMail(
String absender, String empfaenger,
String betreff, String nachricht)
{
try {
Properties props=new Properties();
Authenticator auth=new MailAuthenticator();
props.put("mail.smtp.host","IP-Adresse");
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props, auth);
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();
}
}
class MailAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("Benutzer","Passwort");
}
}
}
RPG-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 javaMailSendMail...
D S O CLASS(*JAVA: 'javaMail.JavaMail' )
D sendMail PR EXTPROC(*JAVA : 'javaMail.JavaMail+
D ' : 'sendMail' )
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 javaMailSendMailMitAnhang...
D S O CLASS(*JAVA: 'javaMail.JavaMail' )
D sendMailMitAnhang...
D PR EXTPROC(*JAVA : 'javaMail.JavaMail+
D ' : 'sendMailMitAnhang' )
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' )
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');
sendMail(javaMailSendMail:absender:empfaenger:betr eff:nachricht);
//sendMailMitAnhang(
// javaMailObj:absender:empfaenger:betreff:nachricht: dateien);
/end-free
P E