Aplet nie wysyła wiadomości email - javax.mail

0

Witam...

Stworzyłem aplet, który ma wysyłać maile. Działa wszystko z poziomu netbeans lecz nie działa z poziomu przeglądarki
Podpisałem wszystkie pliki jar których używam i dalej nic.
Jak patrzę na ikonkę od połączenia sieciowego to podczas wsyłania świeci się (tak jakby wysyało).

Pomóżcie, dlaczego to nie chce wysyłać z poziomu przeglądarki? :(((

Pozdrawiam...

0

Wróżka na urlopie.
Daj kod wysyłający i kod HTML-a z apletem

0

Witam

Sorki za nie wstawienie kodu.

Jak wspomniałem. Z netbeans działa wszsytko jak należy.
z przeglądarki już nie. Podpisany aplet, podpisany plik "mail.jar" i jeszcze "jxl.jar" bo też go tu używam.

Pomoże ktoś??

To ten kod.

Z góry dzięki,
Pozdrawiam

void wyslij_plik(String dokogo, String odkogo, String odkogo_, String temat, String tresc) {

class myAuthenticator extends javax.mail.Authenticator {
        @Override
        public javax.mail.PasswordAuthentication getPasswordAuthentication() {
                return new javax.mail.PasswordAuthentication(username, password);
        }
}

try {
      Properties props = System.getProperties();
      javax.mail.Authenticator auth = new myAuthenticator();
      props.put("mail.smtp.host", host);
      props.put("mail.smtp.user", username);
      props.put("mail.smtp.password", password);
      props.put("mail.smtp.auth", "true");

      Session session = Session.getDefaultInstance(props, auth);

      MimeMessage msg = new MimeMessage(session);

      Address bill = new InternetAddress(odkogo, odkogo_);
      Address elliotte = new InternetAddress(dokogo);

      msg.setFrom(bill);
      msg.setRecipient(Message.RecipientType.TO, elliotte);
      msg.setSubject(temat);

      Multipart mPart = new MimeMultipart();

      BodyPart mbp1 = new MimeBodyPart();
      mbp1.setContent(tresc, "text/html; charset=iso-8859-2");



          BodyPart mbp2 = new MimeBodyPart();
          FileDataSource fds1 = new FileDataSource("image001.jpg");
          mbp2.setDataHandler(new DataHandler(fds1));
          mbp2.setHeader("Content-ID","<image1>");

          BodyPart mbp2_ = new MimeBodyPart();
          FileDataSource fds1_ = new FileDataSource("image002.jpg");
          mbp2_.setDataHandler(new DataHandler(fds1_));
          mbp2_.setHeader("Content-ID","<image2>");

          BodyPart mbp3 = new MimeBodyPart();
    if (zal1.length() > 0) {
          FileDataSource fds2 = new FileDataSource(zal1);
          mbp3.setDataHandler(new DataHandler(fds2));
          mbp3.setFileName(fds2.getName());
    }

          BodyPart mbp4 = new MimeBodyPart();
    if (zal2.length() > 0) {
          FileDataSource fds3 = new FileDataSource(zal2);
          mbp4.setDataHandler(new DataHandler(fds3));
          mbp4.setFileName(fds3.getName());
    }

          BodyPart mbp5 = new MimeBodyPart();
    if (zal3.length() > 0) {
          FileDataSource fds4 = new FileDataSource(zal3);
          mbp5.setDataHandler(new DataHandler(fds4));
          mbp5.setFileName(fds4.getName());
    }

          BodyPart mbp6 = new MimeBodyPart();
    if (zal4.length() > 0) {
          FileDataSource fds5 = new FileDataSource(zal4);
          mbp6.setDataHandler(new DataHandler(fds5));
          mbp6.setFileName(fds5.getName());
    }

          
          mPart.addBodyPart(mbp1);
          mPart.addBodyPart(mbp2);
          mPart.addBodyPart(mbp2_);
    if (zal1.length() > 0) mPart.addBodyPart(mbp3);
    if (zal2.length() > 0) mPart.addBodyPart(mbp4);
    if (zal3.length() > 0) mPart.addBodyPart(mbp5);
    if (zal4.length() > 0) mPart.addBodyPart(mbp6);

      // add the Multipart to the message

      msg.setContent(mPart);
      msg.saveChanges();


Transport transport = session.getTransport("smtp");
transport.connect(host, 587, username, password);

transport.sendMessage(msg, msg.getAllRecipients());
transport.close();

//Transport.send(msg);


    }
    catch (Exception ex) {
      ex.printStackTrace();
    }


  }

A to kod html'a:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <title>MAIL SEND</title> </head> <body>

<applet codebases="classes" code="Mail.class" archive="Mailing.jar, mail.jar, jxl.jar" width="1200" height="800" /> </body> </html>

0

Strzelam, że brak uprawnień apletu do komunikacji sieciowej.

0

Funkcja wyslij_plik(...) się uruchamia? Żeby sprawdzić dodaj na początku wiersz: System.out.println("Zaczynam wysylanie");
Na konsoli coś się pojawia?

catch (Exception ex) {
ex.printStackTrace();
}
0

Jak tylko będę miał dostęp do kodu to sprawdzę: System.out.printline("coś tam....");

Podejrzewam, że funkcja jest wywoływana ponieważ:
Ikona połączenia sieciowego - ten monitorek niebieski kiedy jest transfer - świeci kiedy wcisnę klawisz <wyślij>.

Ale tak jak napisałeś, lepiej się upewnić...

Jak tylko będę miał możliwość to sprawdzę to.

0

OK.

Zaraz przed "try {" dodałem linijkę kodu: jLabel1.setText(temat); - temat jest za każdym razem inny.

Po podpisaniu apletu i uruchomieniu w przeglądarce jLabel1 ładnie zmienia tematy ale maile nadal nie są wysyłane.

Wygląda na to, że funkcja wyslij_plik() jest wywoływana tylko coś/czegoś brakuje albo po prostu cała ta funkcja powinna wyglądać inaczej...

Cóż to może być...

0

Po południu spróbuję napisać aplet wysyłający pocztę (zaciekawił mnie problem). Jak działa Twój aplet przy wysyłaniu maili bez załączników? Twój sposób odczytywania załączników (FileDataSource("image001.jpeg")) wydaje mi się niedobry. Aplet ma przecież pobrać załączniki z serwera, a nie z komputera użytkownika.

0

Napisałem na razie prostą wersję (bez załączników) i działa. Musiałem usunąć plik mail.jar z katalogu ...jre6\lib\ext, przeglądarka w pierwszej kolejności szuka klas w tym katalogu, a nie w plikach wymienionych w znaczniku archive.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class Sender extends JApplet implements ActionListener
{
    public void init()
    {
        JButton send=new JButton("Wyślij");
        send.addActionListener(this);
        add(send);
    }
    //------------------------
    public void actionPerformed(ActionEvent ae)
    {
        Properties nadawca=new Properties();
        nadawca.put("mail.smtp.host",...);
        nadawca.put("mail.from",...);
        nadawca.put("mail.smtp.auth","true");
        Session session=Session.getDefaultInstance(nadawca,new Autentyfikator());
        Message msg=new MimeMessage(session);
        try
        {
            msg.addRecipient(Message.RecipientType.TO,new InternetAddress(...));
            msg.setSubject("Twoje zbawienie");
            msg.setText("Jasna dupa \n Ojciec Dyrektor");
            Transport.send(msg);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
//------------------------------------------------
class Autentyfikator extends Authenticator
{
    public PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication(...);
    }
}
<applet width="200" height="100" code="Sender" archive="Sender.jar,mail.jar">
</applet>
0

No właśnie. Załączniki są na dysku lokalnym. nie mogą być na serwerze, bo w zależności od maila te załączniki są różne.

Da się tak, aby załączniki szły z dysku lokalnego a nie z serwera?

Jak będę miał dostęp do kodu to sprawdzę czy to przez te załączniki...

0

Jeżeli Twój sam aplet nie tworzy pliku image001.jpg, to kod

new FileDataSource("image001.jpg");

jest, imho, bez sensu. Z jakiego katalogu aplet ma odczytywać plik image001.jpg, i skąd wiesz, że ten plik tam jest?

0

Podpisz te pliki .jar jarsignerem (zguglaj, znajdziesz instrukcje, do wszystkich ten sam chyba może być użyty).
Bez certyfikatu, albo porzuceniem bezpieczeństwa aplety nie mają dostępu do wielu ficzerów takich jak odczyt z HDD.

0

Podpisany aplet, podpisany plik "mail.jar" i jeszcze "jxl.jar" bo też go tu używam.

Razi, czytaj wątek, potem odpowiadaj.

0

Dodałem wysyłanie załączników, w aplecie jest JFileChooser i użytkownik może wybrać załączniki. Aplet działa. Są dwie różnice między Twoim i moim apletem.
Ja wysyłam przez Transport.send() i trochę inaczej ustawiam własności załącznika:

String str=pełna_nazwa_pliku;
BodyPart attachment=new MimeBodyPart();
if (str.toLowerCase().endsWith(".jpeg")||str.toLowerCase().endsWith(".jpg"))
{
   attachment.setContent(str,"image/jpeg");
}
if (str.toLowerCase().endsWith(".gif"))
{
   attachment.setContent(str,"image/gif");
}
if (str.toLowerCase().endsWith(".pdf"))
{
   attachment.setContent(str,"application/pdf");
}
if (str.toLowerCase().endsWith(".mp3"))
{
   attachment.setContent(str,"audio/mpeg");
}
if (str.toLowerCase().endsWith(".zip"))
{
   attachment.setContent(str,"application/zip");
}
DataSource source=new FileDataSource(str);
attachment.setDataHandler(new DataHandler(source));
attachment.setFileName(str);
mp.addBodyPart(attachment);
0

Witam

Problem rozwiązany.

Człowiek jednak głupi jest. Chodziło o ścieżkę dostępu do plików image001.jpg i image002.jpg. Faktycznie aplet ne wiedział gdzie ich szukać. Teraz problem rowiązany. Nelażało tylko wskazać ścieżkę do plików jpg i wszystko śmiga jak trzeba.

Dziękuję wszystkim za zaangażowanie i pomoc w rozwiązywaniu problemu.
To bardzo miłe, że poświęciliście swój czas i słuzycie swoimi radami, które oczywiście pomogły.

Jeszcze raz dziekuję bardzo,
Pozdrawiam
Bodek6

0

Witam

Jednak nie jest tak pieknie jak myślałem :(

Te dwa "image1" i "image2" w mailu nie są wyświetlane. Pokazuje sie tylko ikonka z nazwą obrazek i nic poza tym:(

Czy dołączenie ich za pomocą mojego kodu a potem wyświetlenie w kodzie html za pomocą kodu: img src="cid:image1" jest błędne??

Jesli tak to w jaki sposób wyświetlić te obrazki w mailu? Mail jest pisany kodem html.

Znów bardzo proszę o pomoc :(

Z góry dziekuję
Pozrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1