Archief - java mail met bijlage

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

bikkerss

Legacy Member
ik probeer een mail form toe te voegen aan een applicatie maar stuut op een probleem

ik kan mails versturen maar vanaf het moment dat ik een bijlage plaats bij deze mail krijg ik de mail toegezonden met bijlage maar krijg als tekst iets dergelijks als

javax.mail.internet.MimeMessage@92eb86

if(jList1.getModel().getSize()>0)
{
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(inhoud);

messageBodyPart2 = new MimeBodyPart();
Multipart multipart = new MimeMultipart();

for( int i = 0; i < jList1.getModel().getSize(); i++ )
{

FileDataSource fileDataSource =new FileDataSource(jList1.getModel().getElementAt(i).toString() );
messageBodyPart2.setDataHandler(new DataHandler(fileDataSource));
messageBodyPart2.setFileName(jList1.getModel().getElementAt(i).toString());
multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(messageBodyPart2);
}

// Put parts in message
msg.setContent(multipart);

}

Transport.send(msg);
JOptionPane.showMessageDialog(rootPane, "uw bericht aan " + Mail_aan.getText() + " is verzonden") ;


} catch (MessagingException mex)
{
System.out.println("VERSTUREN MISLUKT FOUT BIJ : " + mex);
}

}

@Action
public void attach() throws SqlJetException, MessagingException
{
int y=1;
final JFileChooser kiesattachment = new JFileChooser();
kiesattachment.setBounds(0,0,400,400);

for (i = 0 ; i <=5; i++)
{
kiesattachment.setVisible(rootPaneCheckingEnabled);
int attach = kiesattachment.showDialog(Mail.this, "Voeg toe");
attachlijst.add(i, kiesattachment.getSelectedFile());
y++;

JDialog.setDefaultLookAndFeelDecorated(true);
int response = JOptionPane.showConfirmDialog(null, "Wilt u nog een bijlage toevoegen?", "Confirm",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (response == JOptionPane.NO_OPTION)
{
jList1.setModel(attachlijst);
i=6;

} else if (response == JOptionPane.YES_OPTION) {
}
else if (response == JOptionPane.CLOSED_OPTION) {
System.out.println("");
}

kimdenkt

Legacy Member
Ken de API niet echt goed, maar dat gezegd zijnde ...
Eerst bouw je een MimeMessage op, dan roep je de toString methode op en steek je die in de String-variabele "inhoud". Ik vermoed dat de MimeMessage klasse niet de standaard toString methode van Object override, waardoor je dus standaard zoiets als "javax.mail.internet.MimeMessage@92eb86" krijgt.
Wat later steek je die "inhoud" in de MimeBodyPart waardoor dat de tekst van je mail wordt.
Wellicht moet je in je "inhoud" variable gewoon hetzelfde steken als wat je als argument meegeeft aan msg.setText op de 6e lijn van je code daar. En wellicht kan die lijn dan weg.

NeverwinterX

Legacy Member
bikkerss zei:
for( int i = 0; i < jList1.getModel().getSize(); i++ )
{

FileDataSource fileDataSource =new FileDataSource(jList1.getModel().getElementAt(i).toString() );
messageBodyPart2.setDataHandler(new DataHandler(fileDataSource));
messageBodyPart2.setFileName(jList1.getModel().getElementAt(i).toString());
multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(messageBodyPart2);
}

Gaat dit trouwens wel werken? Je past de messageBodyPart2 constant zelf aan en je voegt deze opnieuw toe aan de multipart: die ouwe dingen die je hebt toegevoegd aan multipart passen ook aan. Ik neem aan dat je eigenlijk nieuwe bodypart objecten wilt maken en toevoegen.

bikkerss

Legacy Member
ja, dat werk allemaal
@kimdenkt bedankt had het zelf niet gezien, bij deze werkt alles

kimdenkt

Legacy Member
Graag gedaan!
Ik weet niet of je "ja dat werkt allemaal" sloeg op die post van NeverwinterX, maar hij/zij heeft denk ik wel een punt.
Die code werkt zolang er 1 attachment is, maar anders gaat het wellicht de mist in. Je maakt namelijk eerst je multipart object aan (initiëel leeg), en dan voeg je per attachment de eigenlijke body en een nieuwe bodypart voor de file toe.
Op het eerste zicht zou je de for-loop en de 2 lijnen ervoor misschien best vervangen door
Code:
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
for( int i = 0; i < jList1.getModel().getSize(); i++ )
{
FileDataSource fileDataSource =new FileDataSource(jList1.getModel().getElementAt(i).toString());
messageBodyPart2 = new MimeBodyPart();
messageBodyPart2.setDataHandler(new DataHandler(fileDataSource));
messageBodyPart2.setFileName(jList1.getModel().getElementAt(i).toString());
multipart.addBodyPart(messageBodyPart2); 
}
Op die manier maak je eerst je multipart object aan met daarin de eigenlijke body. Dan maak je voor elke attachment in je model een nieuwe bodypart voor de file.
Merk op dat je op die manier ook je messageBodyPart2 object kan declareren binnen de for-loop in plaats van ergens vooraf. In de meeste gevallen is het best om de scope van variabelen zo klein mogelijk te houden, dat verhoogt de leesbaarheid van je code.

bikkerss

Legacy Member
dank je, mijn programmeren is nog veel met vallen en opstaan maar ik leer bij :-)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan