Email html

Programmation d'applications complexes
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Email html

Message par microdevweb »

Bonjour à tous,

Voici une module pour envoyer un email sous le format html, ce module utilise un Jar java (jvm version 8 ), il est donc indispensable que la machine possède une machine virtuel java ( 8 ou supérieur) https://www.java.com/fr/download/

Vous pouvez :
  • Créer plusieurs messages
  • Envoyer le message à plusieurs destinataire ( actuellement to uniquement)
  • Ajouter une ou plusieurs pièces jointes
Download to github

Remarque : vous pouvez utiliser JMail.rar avec votre propre code, pour ce faire vous devez créer une fichier dans le même répertoire nommé
args.txt au format ascii avec les données suivantes
  • adresse email de la provenance
  • smtp host
  • smtp port
  • ASYNC ou SSL
  • smtp user
  • smtp password
  • subject
  • message html
  • vide ou liste des pièces jointes séparées par un @
Lancer ensuite le fichier jar avec RunProgramme

Vous pouvez récupérer le résultat dans le fichier

Voici un exemple de code : status.log
  • sended -> le message a bien été envoyé
  • failure -> le message n'a pas été envoyé

Code : Tout sélectionner

XIncludeFile "../EMAIL_HTLM/EMAIL.pbi"
; WARNING GET THE DIRECTORY OF JAR JMail.jar
; FOR EXAMPLE
EMAIL::JARDirectory = "A:\PB_HTML_EMAIL\EMAIL_HTLM\JAR\"
; WARNING FILL THIS CONSTANTES
#SMTP_HOST = "pro.eu.turbo-smtp.com" ; for exmaple with turbo smtp
#SMTP_PORT = 587
#SMTP_USER = "yourAddress@hotmail.com"
#SMTP_PSW = "yourPsw"
#FROM = "addressToFrom@gmail.com"

Global mail.EMAIL::Email = EMAIL::newEmail(#SMTP_HOST,#SMTP_PORT,#SMTP_USER,#SMTP_PSW)
msg.s = "<h1> Ceci est un teste </h1><br>"+
        "<p>Le <b>Lorem Ipsum</b> est simplement du faux texte employé dans la "+
        "composition et la mise en page avant impression. Le Lorem Ipsum est le faux "+
        "texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme"+
        " assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte."+
        " Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique,"+
        " sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente "+
        "de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion "+
        "dans des applications de mise en page de texte, comme Aldus PageMaker.</p>"
; WARNING GET A CORRECT EMAIL ADRESS
Define email_1.s = "targetEmail@gmail.com"
Define email_2.s = "targetEmail@hotmail.com"

Define m.EMAIL::Message = mail\addMessage(EMAIL::newMessage(#FROM,email_1,"msg 1",msg))
m\addTargetAddress(email_2)
Define m.EMAIL::Message = mail\addMessage(EMAIL::newMessage(#FROM,email_1,"msg 2",msg))
m\addTargetAddress(email_2)

mail\send()

; TEST IF MESSAGES ARE BE SENDED
mail\resetMessage()
While mail\nextMessage()
  Define ms.EMAIL::Message = mail\getMessage()
  ms\resetTargetAddress()
  While ms\nextTargetAddress()
    If ms\isSended()
      Debug "message to "+ms\getEmailAddress()+" has was sended"
    Else
      Debug "message to "+ms\getEmailAddress()+" diden't sended"
    EndIf
  Wend
Wend
Le code java uniquement à titre informatif

Code : Tout sélectionner

package jmail;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
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.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 *
 * @author microdev
 */
public class JMail {
    private static String from;
    private static String smtpHost;
    private static String smtpPort;
    private static String smtpType;
    private static String smtpLogin;
    private static String smtpPsw;
    private static String msgSubject;
    private static String msgContent;
    private static String msgTarget;
    private static String[] myAttachements;
    private static boolean isAtachement;

    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if(readArguments()){
            sendEmail();
        }else{
            writeStatus("failure");
        }
    }
    
    private static void sendEmail(){
        ArrayList<MimeBodyPart> attachements = new ArrayList<>();
        Properties properties = new Properties();
        properties.put("mail.smtp.auth", "true");
        if ( smtpType == "SSL") {
            properties.put("mail.smtp.starttls.enable", "true");
        }
        properties.put("mail.smtp.host",smtpHost);
        properties.put("mail.smtp.port",smtpPort);

        Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(smtpLogin,smtpPsw);
            }
        });
        try {
            MimeMessage message = new MimeMessage(session);
            Multipart multipart = new MimeMultipart();
            
            message.setFrom(new InternetAddress(from));

            message.addRecipient(Message.RecipientType.TO,new InternetAddress(msgTarget));
 

            message.setSubject(msgSubject);
            
            // create body part for the message
            MimeBodyPart messaBodyPart = new MimeBodyPart();
            messaBodyPart.setContent(msgContent, "text/html;charset=UTF-8");
            
            if(isAtachement){
                for(String a : myAttachements){
                    attachements.add(new MimeBodyPart());
                    DataSource ds = new FileDataSource(a);
                    attachements.get(attachements.size()-1).setDataHandler(new DataHandler(ds));
                    attachements.get(attachements.size()-1).setFileName(new File(a).getName());
                    multipart.addBodyPart(attachements.get(attachements.size()-1));
                }
            }
            multipart.addBodyPart(messaBodyPart);
            message.setContent(multipart,"UTF-8");
            Transport.send(message);
            writeStatus("sended");

        } catch (MessagingException e) {
            e.printStackTrace();
            writeStatus("failure");
        }
    }
    
    private static boolean readArguments() {
        boolean valRet = true;
        BufferedReader reader;
        try {
            reader = new BufferedReader(new FileReader("args.txt"));
            if (reader != null) {
                // 1 from
                String line = reader.readLine();
                if (line != null) {
                    from = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                }
                // 2
                line = reader.readLine();
                if (line != null) {
                    smtpHost = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                }
                // 3
                line = reader.readLine();
                if (line != null) {
                    smtpPort = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                }
                // 4
                line = reader.readLine();
                if (line != null) {
                    smtpType = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                }
                // 5
                line = reader.readLine();
                if (line != null) {
                    smtpLogin = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                }
                // 6
                line = reader.readLine();
                if (line != null) {
                    smtpPsw = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                } 
                // 6
                line = reader.readLine();
                if (line != null) {
                    msgSubject = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                } 
                // 7
                line = reader.readLine();
                if (line != null) {
                    msgContent = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                } 
                // 8
                line = reader.readLine();
                if (line != null) {
                    msgTarget = new String(line.getBytes("ISO-8859-1"));
                } else {
                    valRet = false;
                } 
                // 9
                line = reader.readLine();
                if (line != null) {
                    myAttachements = line.split("@");
                    isAtachement = true;
                } else {
                    isAtachement = false;
                }
            } else {
                valRet = false;
            }
        } catch (IOException ex) {
           valRet = false;
        }
        return valRet;
    }
    
    private static boolean writeStatus(String status) {
        boolean valRet = true;
        try {
            FileWriter fw;
            fw = new FileWriter("status.log");
            if (fw != null) {
                PrintWriter st = new PrintWriter(fw);
                st.println(status);
                fw.close();
            }
        } catch (IOException ex) {
            valRet = false;
        }
        return valRet;
    }
    
}

Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Email html

Message par Kwai chang caine »

J'ai pas pu tester, mais j'aime beaucoup ta façon de coder en JAVA.
il me semble que tu utilises le moins possible les imbrications de fonctions.
Du coups pour moi c'est beaucoup plus facile à lire, on dirait presque du pb 8)
Parce que j'ai toujours pas compris ce qu'on gagne à imbriquer des fois sur 4 niveaux les fonctions.
C'est peut être plus court à écrire, mais à lire...on est pzs dans un punch
Surtout que souvent les gars qui font ça, ne respectent pas non plus l'indentation :|
Au final, il est presque plus facile de lire le binaire :mrgreen:
C'est ce genre de codage qui a commencé à me faire détester JAVA :?
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Email html

Message par microdevweb »

@Kwai chang caine,

Merci mais dans ce cas précis je n'ai qu'une seul classe, c'est donc en effet for proche du procédural. Dans le cas de plusieurs classes la Evidemment tu a souvent ce genre de chose

Code : Tout sélectionner

myPerson.getCity().getCountry().getName();
Voici une chose impossible à faire en Pb qui donnerais

Code : Tout sélectionner

define ci.CLASS.city = myPerson\getCity()
define co.CLASS.city = ci\getCountry()
co\getName()
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Email html

Message par Kwai chang caine »

Ce dont je parle et que je supporte pas c'est le style d'imbriquement, quant il est forcé :?
Les styles try/Catch, enfin tout ces trucs qui font qu'on sait jamais ou on se trouve :|

Code : Tout sélectionner

fonction premiere
{
                    fonction deuxieme
                    {
                                       fonction troisieme{}
                    }
 }
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Email html

Message par Ar-S »

Merci pour ce partage. Je testerai dès que possible.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre