Avatar billede galaxy Nybegynder
22. januar 2003 - 15:31 Der er 20 kommentarer og
1 løsning

Mail fra jsp (igen) med user og pass

Det har været oppe og vende nogen gange, men efter at have læst alle svar igennem (og afprøvet en del), er det stadig ikke lykkedes mig, at finde noget 100% brugbart.

Problemet er administrationsdelen, til en hjemmeside, hvor jeg har lavet en login-del. I det tilfælde, at en bruger så forsøger at logge på databasen og denne er nede, skal der så automatisk sendes en fejl-mail til Admin. Og her er så problemet:
SMTP-serveren kræver brugernavn og password, for at en bruger kan logge på. Jeg er klar over, at jeg skal bruge put("mail.smpt.auth", "true"); men har rodet med det hele dagen og stadig ikke fået noget til at virke.
En færdig test løsning, med både jsp og servlet ville være kanon ;-)

Derfor: Hjæælp, Disky :-) og resten herinde.
Avatar billede arne_v Ekspert
22. januar 2003 - 16:07 #1
Der er et eksempel på hvrdan man sender med brug af AUTH på:
  http://www.cwdn.net/article/java/javamail.htm

(teksten er på kiniesisk, men Java koden kan sagetens læses !)
Avatar billede arne_v Ekspert
22. januar 2003 - 16:18 #2
Du erstatter:

            Properties props = System.getProperties();
            props.put("mail.smtp.host", "din-mailserver");
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("fra-adressen"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress("til-adressen"));
            message.setSubject("emne-linien");
            message.setText("teksten");
            Transport.send(message);

med:

            Properties props = System.getProperties();
            props.put("mail.smtp.host", "din-mailserver");
            props.put("mail.smtp.auth","true");
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("fra-adressen"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress("til-adressen"));
            message.setSubject("emne-linien");
            message.setText("teksten");
            Transport transport = session.getTransport("smtp");
            transport.connect(host, "dit-brugernavn", "dit-kodeord");
            transport.sendM(message);

(jeg kan ikke teste det da jeg ikke har adgang til en sådan mail-server)
Avatar billede arne_v Ekspert
22. januar 2003 - 16:20 #3
Hov. Der røg et ekstra M ind i den sidste linie. det skal naturligis
ikke være der.
Avatar billede arne_v Ekspert
22. januar 2003 - 16:23 #4
Skidt pyt. Den er forkert alligevel.

Korrekt er:

            Properties props = System.getProperties();
            props.put("mail.smtp.host", "din-mailserver");
            props.put("mail.smtp.auth","true");
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("fra-adressen"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress("til-adressen"));
            message.setSubject("emne-linien");
            message.setText("teksten");
            Transport transport = session.getTransport("smtp");
            transport.connect(host, "dit-brugernavn", "dit-kodeord");
            transport.sendMessage(message, message.getAllRecipients());
Avatar billede disky Nybegynder
22. januar 2003 - 21:26 #5
Hej Galaxy :)

Arne's svar skulle virke så vidt jeg lige kan se uden at teste det.

Men helt ærligt synes du ikke 150 point er lige i overkanten for sådanne et spørgsmål ?
Avatar billede galaxy Nybegynder
22. januar 2003 - 23:52 #6
Jeg kan desværre først teste det ordentligt i morgen tidlig, når jeg er i skole, men kigger da lige på det nu.
Mht. point. Jo, det har du ret i, men i eftermiddags, var jeg sq ved at blive halvdesperat efter en færdig løsning ;-)
Avatar billede disky Nybegynder
23. januar 2003 - 07:58 #7
Når du engang synes du skal afslutte problemmet, svar selv og behold en del point selv.

F.eks. 30 point for denne opgave er helt fair, husk 60 point er for en svær opgave, og 30 er for en alm. opgave.
Avatar billede arne_v Ekspert
23. januar 2003 - 08:29 #8
Og http://www.eksperten.dk/spm/285033 var værd 100 point p.g.a. at den
var så meget sværere, fordi der ikke skulle angives brugernavn/password ????
Avatar billede galaxy Nybegynder
23. januar 2003 - 10:24 #9
Jeg går i gang nu... men hvorfor er det lige, at du vil have, at jeg skal lave om på den ?? Vi har jo user og pass autentikationen længere nede i den originale ?
Og bare rolig Arne... Når jeg har udlovet 150 points, så uddeles de også :-)
Avatar billede arne_v Ekspert
23. januar 2003 - 10:40 #10
Du mener hvorfor jeg lavede om fra:
  transport.send(message);
til:
  transport.sendMessage(message, message.getAllRecipients());
?

Det første compiler ikke ! Af uransagelige årsager har Transport
klassen en statisk send med 1 argument og en ikke-statistisk
sendMessage med 2 argumenter.
Avatar billede galaxy Nybegynder
23. januar 2003 - 10:49 #11
jep, men koden på den side du henviser til bruger også sendMessage.
vi er enige om, at det er denne kode vi taler om ikke:

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class MailExample {
public static void main (String args[]) throws Exception ,MessagingException{
String host = "smtp.263.net";
String from = "zong_feng@263.net";
String to = "zfvc@163.com";


// Get system properties
Properties props = System.getProperties();

// Setup mail server
props.put("mail.smtp.host", host);

props.put("mail.smtp.auth","true");

// Get session
Session session = Session.getDefaultInstance(props, null);

// Define message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Hello JavaMail");
message.setText("Welcome to JavaMail");
message.saveChanges();

// Send message
Transport transport = session.getTransport("smtp");
transport.connect(host, "zong_feng","111111");
transport.sendMessage(message, message.getAllRecipients());
}
}
Avatar billede arne_v Ekspert
23. januar 2003 - 10:55 #12
Ja.

transport.sendMessage med 2 argumenter virker.

transport.send med 1 argument virker ikke.

(med i tilfældet uden username/password virker
Transport.send med 1 argument)
Avatar billede galaxy Nybegynder
23. januar 2003 - 11:20 #13
Point givet og det virker kanon (uden ændringer)

Jeg siger mange tak ;-)
Avatar billede galaxy Nybegynder
23. januar 2003 - 14:54 #14
tjah... det virker som alm. applikation, men kan ikke få det til at køre som servlet :-(
Avatar billede galaxy Nybegynder
23. januar 2003 - 16:06 #15
Er der ikke lige en af jer der kan klappe det ind i panden på mig med en stor hammer.

public static void main (String args[]) throws Exception ,MessagingException{
skal jo laves om... men til hvad ??
Avatar billede arne_v Ekspert
23. januar 2003 - 16:25 #16
Jeg ville ikke begynde at konvertere den applikation til en servlet.

Jeg ville tage de relevante linier og kopiere dem ind i den
servlet som jeg formoder, at du allerede har.
Avatar billede arne_v Ekspert
23. januar 2003 - 16:26 #17
Altså cirka de her linier:

            Properties props = System.getProperties();
            props.put("mail.smtp.host", "din-mailserver");
            props.put("mail.smtp.auth","true");
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("fra-adressen"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress("til-adressen"));
            message.setSubject("emne-linien");
            message.setText("teksten");
            Transport transport = session.getTransport("smtp");
            transport.connect(host, "dit-brugernavn", "dit-kodeord");
            transport.sendMessage(message, message.getAllRecipients());

og så skal du bare have import og catch på plads.
Avatar billede arne_v Ekspert
23. januar 2003 - 16:34 #18
Noget i retning af:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MailServlet extends HttpServlet {
    private final String MAIL_SERVER = "x.x.x.x";
    private final String FROM_ADDRESS = "nn@somewhere.dk";
    private final String USER_NAME = "me";
    private final String PASSWORD = "hemmeligt";
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", MAIL_SERVER);
            props.put("mail.smtp.auth","true");
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(FROM_ADDRESS));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(req.getParameter("to")));
            message.setSubject(req.getParameter("subject"));
            message.setText(req.getParameter("text"));
            Transport transport = session.getTransport("smtp");
            transport.connect(host, USER_NAME, PASSWORD);
            transport.sendMessage(message, message.getAllRecipients());
            return;
    }
}
Avatar billede arne_v Ekspert
23. januar 2003 - 16:36 #19
Ovenstående tager 3 felter fra en form:
  to
  subject
  text
og sender en email.

PS: Der skal selvfølgelig også outputtes et eller andet svar
til brugeren evt. forwardes til en JSP side.
Avatar billede arne_v Ekspert
23. januar 2003 - 16:42 #20
Et lidt mere komplet eksempel med alle imports, exception handling
og redirect til en JSP side:

package test;

import java.io.IOException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MailServlet extends HttpServlet {
    private final String MAIL_SERVER = "x.x.x.x";
    private final String FROM_ADDRESS = "nn@somewhere.dk";
    private final String USER_NAME = "me";
    private final String PASSWORD = "hemmeligt";
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException {
        try {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", MAIL_SERVER);
            props.put("mail.smtp.auth", "true");
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(FROM_ADDRESS));
            message.addRecipient(
                Message.RecipientType.TO,
                new InternetAddress(req.getParameter("to")));
            message.setSubject(req.getParameter("subject"));
            message.setText(req.getParameter("text"));
            Transport transport = session.getTransport("smtp");
            transport.connect(MAIL_SERVER, USER_NAME, PASSWORD);
            transport.sendMessage(message, message.getAllRecipients());
            resp.sendRedirect("MailSend.jsp");
        } catch (IOException e) {
        } catch (AddressException e) {
        } catch (NoSuchProviderException e) {
        } catch (MessagingException e) {
        }
        return;
    }
}
Avatar billede galaxy Nybegynder
24. januar 2003 - 00:56 #21
Alt kom til at virke perfekt nu, så endnu engang TAK !!! :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester