PureBasic

Forums PureBasic
Nous sommes le Sam 24/Oct/2020 3:32

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
 Sujet du message: Email html
MessagePosté: Lun 05/Aoû/2019 0:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1733
Localisation: Belgique
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:
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:
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Email html
MessagePosté: Mar 06/Aoû/2019 7:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6714
Localisation: Isere
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Email html
MessagePosté: Mar 06/Aoû/2019 17:15 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1733
Localisation: Belgique
@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:
myPerson.getCity().getCountry().getName();


Voici une chose impossible à faire en Pb qui donnerais

Code:
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Email html
MessagePosté: Sam 10/Aoû/2019 14:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6714
Localisation: Isere
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:
fonction premiere
{
                    fonction deuxieme
                    {
                                       fonction troisieme{}
                    }
}

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Email html
MessagePosté: Dim 11/Aoû/2019 15:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 9027
Merci pour ce partage. Je testerai dès que possible.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.6x / 5.7x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye