CreateMail et CSS/HTML [résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
tinangel
Messages : 56
Inscription : ven. 18/janv./2008 6:14

CreateMail et CSS/HTML [résolu]

Message par tinangel »

Bonjour,

J'aurais une petite question concernant les fonctions de mails de PB.

Existe-t-il un moyen d'envoyer des mails personnalisés contenant du CSS et du HTML ?

Je dois envoyé un mail ( type carte d'anniversaire ) mais lorsque j'envoie le mail avec PB il considère le corps du mail comme étant du texte brut.

Du coups je reçois en retour non pas le mail avec la mise en page CSS mail le script en brut.

Pourriez-vous me dire comment y remédier et m'aiguiller vers les fonctions ou flags le permettant svp ?

Merci d'avance.
Dernière modification par tinangel le jeu. 10/oct./2013 16:14, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: CreateMail et CSS/HTML

Message par falsam »

Peut être que je me trompe mais il me semble bien que la fonction SendMail() ne permet pas d'envoyer d'email au format html. J'ai un code pour envoyer des mails au format html. Le temps de tester avec la gestion des styles CSS et je poste.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: CreateMail et CSS/HTML

Message par falsam »

■ Le code et sa zone de test à la fin pour envoyer un mail html.

Code : Tout sélectionner

;
; original code from ???
;
; extended for html multipart by infratec
;

#SMTP_BufferLength = 2048

Global *SMTPBuffer          = AllocateMemory(#SMTP_BufferLength)
Global SMTP_LastAnswer$     = "" ; the last answer of the pop3-server
Global SMTP_Last_Error      = 0  ; the last occurred error

Enumeration
 #SMTP_OK
 #SMTP_NoConnection
 #SMTP_No_Answer
 #SMTP_Refused
 #SMTP_Sender_Refused
 #SMTP_Receiver_Refused
 #SMTP_Send_Error
EndEnumeration

#SMTP_Helo    = "HELO "       ; Zum Anfragen an den Server
#SMTP_Mail    = "MAIL FROM:"  ; Zum Verschicken einer E-Mail, hier Absender
#SMTP_RCPT    = "RCPT TO:"    ; Zum Verschicken des Empfängers
#SMTP_Data    = "DATA"        ; Zu sendende Daten anhängen
#SMTP_Close_S = "QUIT"        ; Serververbindung schließen

Global Dim DayOfWeek_Eng.s(6) : DayOfWeek_Eng(0) = "Sun" : DayOfWeek_Eng(1) = "Mon" : DayOfWeek_Eng(2) = "Tue" : DayOfWeek_Eng(3) = "Wed" : DayOfWeek_Eng(4) = "Thu" : DayOfWeek_Eng(5) = "Fri" : DayOfWeek_Eng(6) = "Sat"
Global Dim Month_Eng.s(11)    : Month_Eng(0) = "Jan" : Month_Eng(1) = "Feb" : Month_Eng(2) = "Mar" : Month_Eng(3) = "Apr" : Month_Eng(4) = "May" : Month_Eng(5) = "Jun" : Month_Eng(6) = "Jul" : Month_Eng(7) = "Aug" : Month_Eng(8) = "Sep" : Month_Eng(9) = "Oct" : Month_Eng(10) = "Nov" : Month_Eng(11) = "Dec"

; Send order to Server
Procedure.l SMTP_Send_Server(Connection, Query$) ; OK - geprüft
 SMTP_Last_Error  = #SMTP_Refused
 SendNetworkString(Connection, Query$)
 Result = ReceiveNetworkData(Connection, *SMTPBuffer, #SMTP_BufferLength)
 If Result <> 0
  SMTP_LastAnswer$ = PeekS(*SMTPBuffer, Result)
  If FindString(SMTP_LastAnswer$, "250", 0) Or FindString(SMTP_LastAnswer$, "354", 0)
   SMTP_Last_Error  = #SMTP_OK 
  EndIf
 EndIf
 ProcedureReturn SMTP_Last_Error
EndProcedure

; Open connection to server
Procedure.l SMTP_Open_Server(Server$, PortNumber) ; OK - geprueft
 SMTP_Last_Error = 0
 SMTP_LastAnswer$ = ""
 Connection = OpenNetworkConnection(Server$, PortNumber, #PB_Network_TCP)
 If Connection = 0
  SMTP_Last_Error = #SMTP_NoConnection
 Else
  Result = ReceiveNetworkData(Connection, *SMTPBuffer, #SMTP_BufferLength)
  If Result = 0
   SMTP_Last_Error = #SMTP_No_Answer
  Else
   SMTP_LastAnswer$ = PeekS(*SMTPBuffer, Result)
   Position         = FindString(SMTP_LastAnswer$, " ", 0) + 1
   NewServer$       = Mid(SMTP_LastAnswer$, Position, FindString(SMTP_LastAnswer$, " ", 5) - Position)
   If FindString(SMTP_LastAnswer$, "220", 0) <> 0
    SMTP_Last_Error = SMTP_Send_Server(Connection, #SMTP_Helo + NewServer$ + #CRLF$); = #SMTP_OK
    ProcedureReturn Connection
   EndIf   
  EndIf
 EndIf
 ProcedureReturn 0
EndProcedure

;
; Send Message$ From$ ToWhom$ with Subject$, Copies go ToCC$ or ToBCC$ (hidden)
Procedure.l SMTP_Easy_Send_Message(Connection, From$, ToWhom$, Subject$, Message$, HTML$ = "", ToCC$ = "", ToBCC$ = "") ; OK - geprueft
  Mail$ + "Date: " + DayOfWeek_Eng(DayOfWeek(Date())) + ", " + Str(Day(Date())) + " " + Month_Eng(Month(Date())) + " " + Str(Year(Date()))
  Mail$ + " " + Str(Hour(Date())) + ":" + Str(Minute(Date())) + ":" + Str(Second(Date())) + " +0200" + #CRLF$
  
  Mail$ = "From: "+ From$ + #CRLF$
  
  If ToWhom$ : Mail$ + "To: " + ToWhom$ + #CRLF$ : EndIf
  If ToCC$   : Mail$ + "cc: " + ToCC$ + #CRLF$   : EndIf
  If ToBCC$  : Mail$ + "Bcc: " + ToBCC$ + #CRLF$ : EndIf
  
  MaiL$ + "Subject: " + Subject$ + #CRLF$
 
 
 Mail$ + "MIME-Version: 1.0" + #CRLF$
 If HTML$
   Mail$ + "Content-Type: multipart/alternative; boundary=" + #DQUOTE$ + "==Boundary_XYZ" + #DQUOTE$ + #CRLF$
   Mail$ + "--==Boundary_XYZ" + #CRLF$
   Mail$ + "Content-Type: text/plain; charset=iso-8859-1" + #CRLF$
   Mail$ + "Content-Transfer-Encoding: 8bit" + #CRLF$
   Mail$ + #CRLF$
   Mail$ + Message$ + #CRLF$
   Mail$ + #CRLF$
   Mail$ + "--==Boundary_XYZ" + #CRLF$
   Mail$ + "Content-Type: text/html; charset=iso-8859-1" + #CRLF$
   Mail$ + "Content-Transfer-Encoding: 8bit" + #CRLF$
   Mail$ + #CRLF$
   Mail$ + HTML$ + #CRLF$
   Mail$ + #CRLF$
   Mail$ + "--==Boundary_XYZ--" + #CRLF$
 Else
   Mail$ + "Content-type: text/plain; charset=iso-8859-1" + #CRLF$
   Mail$ + "Content-Transfer-Encoding: 8bit" + #CRLF$
   Mail$ + Message$ + #CRLF$
 EndIf
 
 Mail$ + "." + #CRLF$
 
 Debug Mail$
 
 If SMTP_Send_Server(Connection, #SMTP_Mail + From$ + #CRLF$) = 0
  If SMTP_Send_Server(Connection, #SMTP_RCPT + ToWhom$ + #CRLF$) = 0
   If SMTP_Send_Server(Connection, #SMTP_Data + #CRLF$) = 0
    If SMTP_Send_Server(Connection, Mail$) = 0
     SMTP_Last_Error = #SMTP_OK
    Else
     SMTP_Last_Error = #SMTP_Send_Error 
    EndIf
   Else
    SMTP_Last_Error = #SMTP_Send_Error 
   EndIf
  Else
   SMTP_Last_Error = #SMTP_Sender_Refused 
  EndIf
 Else
  SMTP_Last_Error = #SMTP_Receiver_Refused
 EndIf
 ProcedureReturn SMTP_Last_Error
EndProcedure


; Close connection to server
Procedure.l SMTP_Close_Server(Connection) ; OK - geprueft
 ProcedureReturn SMTP_Send_Server(Connection, #SMTP_Close_S + #CRLF$)
EndProcedure




;
;-Zone de test
Global MailSMTP.s, MailFrom.s, MailTo.s, MailSubject.s, MailMessageTEXT.s, MailMessageHTML.s
Global File.i, FileHTML.s

; Setup
MailSMTP    = "" ;Serveur smtp : Exemple smtp.numericable.fr
MailFrom    = " @ " ;Adresse email expéditeur
MailTo      = " @ " ;Adresse email destinataire
MailSubject  = "Annonce"
MailMessageTEXT = "" ;facultatif

FileHTML = "test.html" ;le fichier html à envoyer

File = ReadFile(#PB_Any, FileHTML)
While Eof(File) = 0
  MailMessageHTML + ReadString(File)
Wend
CloseFile(File)

InitNetwork()

connection = smtp_open_server("smtp.numericable.fr", 25)

If connection
  Debug smtp_easy_send_message(connection, MailFrom, MailTo, MailSubject, MailMessageTEXT, MailMessageHTML)
  smtp_close_server(connection)
EndIf
N'oublie pas le setup :)

J'ai fait des tests et inclure un style CSS dans un message html ne fonctionne pas correctement. La mise en page ne correspond plus voir même si c'est une adresse gmail, la description css est supprimé par google.

La solution serait une codification Old Scool avec des tableaux (HouuUUUUUUuuuu diront certains et j'en fait partie :mrgreen: ) On peut toutefois inclure du style à l'intérieur des balises html (Allez encore des HouuuUUUUuu ..... ha ha ha)

■ Ci-dessous un truc vite fait en html que tu sauvegarderas dans le même dossier que le code plus haut sous le nom de test.html.

Code : Tout sélectionner

<html>
	<head>
	</head>
	<body style="font-family:georgia,serif; background-color:#E2D89A">
		<center>
		<table border="0" cellpadding="1" cellspacing="1" style="width: 500px;">
			<tbody>
				<tr>
					<td>
						<p style="font-size:36px;">Pure Basic 5.20 LTS</p>
						<p style="color:#ff8c00; font-size:22px;">RockStar Release</p>
						<br />
					</td>
				</tr>
				<tr>
					<td style="font-family:georgia,serif; font-size:18px;">
						<p>Nous somme heureux de vous annoncer Pure Basic 5.20 LTS disponible dans votre espace client.</p><br />
					</td>
				</tr>
				<tr>
					<td>
						<p style="text-align:center; background-color:#1b9596;border-radius:15px; padding-bottom:15px; padding-top:15px; padding-left:20px; padding-right:20px; margin-left: 120px; width: 207px;">
						<a style="text-decoration:none; color:#ffffff; font-Size:21px" href="http://purebasic.com/securedownload/Login.php?language=FR" target="_blank"><em>Pure Basic 5.20</em></a>
						</p>
					</td>
				</tr>
				<tr>
					<td>
						<br /><hr />
						<p style="text-align: center;">Vous recevez cet email parce que vous &ecirc;tes client de purebasic.com</p>
					</td>
				</tr>
			</tbody>
		</table>
	</body>
</html>
■ Résultat dans un email
Image
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
tinangel
Messages : 56
Inscription : ven. 18/janv./2008 6:14

Re: CreateMail et CSS/HTML

Message par tinangel »

Tout simplement un gros merci à toi,

Je vais de ce pas regarder tout ça.

Pour ce qui est du codage OLD School c'est normal. Les clients de messageries gère l'affichage des mails de différentes manières.

D'après ce que j'ai pu comprendre, toutes les versions d'Outlook de la 2003 et plus utilise un vieux moteur Word ( si je me souviens bien ... mais à vérifier ).

Gmail, Hotmail, Yahoo & co pour la plupart supprime les feuilles de style et demande à ce que le style soit directement mis dans les balises html ou dans certains cas que le style soit mis dans le body au lieu du head. Je sais qu'avec le style directement dans les balises html ( ex : <td style="width:100px" > ) c'est beaucoup plus compatible.

Enfin il faut éviter au maximum les balises <div> et préférer les balises <table> ( alors entendons-nous bien sur le fait d'utiliser les tableau pour un email personnalisé et pas un site web :wink: )

Encore une fois je te remercie et merci à toutes les personnes qui ont essayé de m'aider.

Je vous fait mes retour une fois les tests effectués.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: CreateMail et CSS/HTML

Message par Mesa »

T'as une library PB exprès ici :
http://planet-rk.bplaced.net/awpbt/dl/a ... -0_1_8.zip avec un exemple dedans.

Et s'il faut le ssl
http://planet-rk.bplaced.net/awpbt/dl/a ... l_mail.zip

Mesa.
Avatar de l’utilisateur
tinangel
Messages : 56
Inscription : ven. 18/janv./2008 6:14

Re: CreateMail et CSS/HTML

Message par tinangel »

Merci Mesa,

Je vais en profiter pour tester aussi.

Je clôs le post car j'ai réussi à me dépatouiller.

Merci encore.
Mesa a écrit :T'as une library PB exprès ici :
http://planet-rk.bplaced.net/awpbt/dl/a ... -0_1_8.zip avec un exemple dedans.

Et s'il faut le ssl
http://planet-rk.bplaced.net/awpbt/dl/a ... l_mail.zip

Mesa.
Répondre