Bonjour à tous, voila mon problème:
J'essai d'envoyer un email avec une pièce jointe grâce à un module gsm/gprs sim800l.
j'utilise les commande "AT", le serveur smtp de gmail, et la lib softwareSerial.
Tous est ok, je peux envoyer un email, lire une page html, envoyer un sms, envoyer un email avec en pièce jointe un fichier .txt,
Mais quand je veux envoyer un fichier .jpg en pièce jointe, le fichier est bien reçut mais casser => la moitié de l'image est correcte mais l'autre est illisible !
La photo est stocker dans la memoire SPIFFS, son poid: 1220 octets.
La photo reçut est endommager et son poid: 1235 octets.
la doc du module sim800l dit: "AT + SMTPFILE"
first parameter: 2 = binary file
second parameter:
third parameter: 1 = "base64"
...
sim800l.print("AT+SMTPFILE=2,\"photo.jpg\",1\r");
...
AT+SMTPFT=1220\r"
...
File file = SPIFFS.open(path_file_attachment);
if(!file){
Serial.println("// failed to open file for reading");
}
Serial.println("// read file from spiffs and send...");
while(file.available()>0){
sim800l.write(file.read());
}
file.close();
sim800l.print("\"");
...
Je suis bloqué!! J'ai essayer plein de choses mais à chaque fois la photo arrive endommager...
je pense que le problème est avec l'encodage et la façon d'envoyer mais je n'y arrive pas.
Merci d'avance à ceux qui pourront m'aider.
en regardant de plus près on dirait que vous avez une inconsistance dans la transmission des fins de ligne --> l'image endommagée n'a pas de manière consistante des CR ou LF (0x0D ou 0x0A) --> il y a 13 caractères de trop, soit des CR (0x0D) soit des LF (0x0A). problème de BASE64?
comment générez vous cette image qui est "cassée" ?
pour info, vous pouvez comparer deux fichiers binaires en ligne avec ce site et vous pouvez explorer et éditer le contenu d'un fichier binaire avec ce site là
Je récupère les données dans la mémoire SPIFFS et les retransmets via le port série.
Il faudrait que je compare les données entre la sortie de la mémoire et celle reçue ?
Et oui lors de mes recherches je suis souvent revenu sur ce problème d'encodage en base64 je suis en train d'essayer de comprendre comment encodé mes données avant de les envoyer sur le port série.
C'est pas facile mais je continue...
ça c'est l'émission de l'image. Ma question c'est comment va t-elle dans le fichier ?
Encoder en base64 ce n'est pas très compliqué - vous pouvez utiliser la librairie de Arturo Guadalupi si vous ne voulez pas coder cela vous même
/*
Base64 encode example
Encodes the text "Base64EncodeExample" to "QmFzZTY0RW5jb2RlRXhhbXBsZQA="
Created 04 May 2016
by Arturo Guadalupi
This example code is in the public domain.
*/
#include <Base64.h>
void setup()
{
// start serial port at 115200 bps:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB only
}
// encoding
char inputString[] = "Base64EncodeExample";
int inputStringLength = sizeof(inputString);
Serial.print("Input string is:\t");
Serial.println(inputString);
Serial.println();
int encodedLength = Base64.encodedLength(inputStringLength);
char encodedString[encodedLength];
Base64.encode(encodedString, inputString, inputStringLength);
Serial.print("Encoded string is:\t");
Serial.println(encodedString);
}
void loop() {}
Désolé, j'ai posté sur le forum anglais pour maximiser mes chances de résoudre mon problème... je ne pensais pas que cela puisse être choquant, étrange ou inadmissible !
Je vous remercie pour le début d'aide que vous m'avez fournie.
@Lesept je te remercie pour ton incurtion constructive dans mon topic... peux tu au moins même vaguement m'expliquer pourquoi je ne peux pas poster la même question à la communauté anglophone et française a la fois ?
peux tu au moins même vaguement m'expliquer pourquoi je ne peux pas poster la même question à la communauté anglophone et française a la fois ?
ça devrait tomber sous le sens....
Vous vous fichez bien d'avoir des bénévoles qui perdent leur temps à explorer VOTRE problème en refaisant ce que d'autres ont potentiellement déjà fait sur une autre partie du forum...
maximiser mes chances de résoudre mon problème
c'est exactement cela - c'est du pur égocentrisme...
Je ne cherchais pas à être destructif ni constructif mais à rappeler les règles du forum. Tu as bien réagi en t'excusant et expliquant que tu ne savais pas.
J-M-L ou d'autres membres du forum viendront certainement t'aider. Essaye déjà les pistes qui te sont proposées.
Hé vous êtes trop fort... sans décorner je suis en admiration. Moi pendant ce temps je bosse sur mon problème.
Vous m'aidez pas la à me faire rigolé, j'ai pas le temps moi...
Même question posée sur trois forums.... (au moins)
même fragment de code montré .... (sur ce forum on poste l'intégralité du code si on veut de l'aide)
même silence sur la partie qui code en Base64 alors que de tous côtés c'est la partie dont la responsabilité est pointée........
Oui tu as raison je ne mets rien concernant la partie base64 car je l'avais complètement zappé c'est sûrement à cause de cela que les data arrivent déformé...
Je suis dessus la mais j'avance pas vite => le boulot les gosses patalipatala... le temps libre est tellement précieux et ceux qui en ont trop se plaignent.
wattexi:
Oui tu as raison je ne mets rien concernant la partie base64 car je l'avais complètement zappé c'est sûrement à cause de cela que les data arrivent déformé...
Vous ne prenez même pas la peine de lire les réponse...
wattexi:
Je suis dessus la mais j'avance pas vite => le boulot les gosses patalipatala... le temps libre est tellement précieux et ceux qui en ont trop se plaignent.
vous faites bien peu de cas du temps précieux des bénévoles - du moment que ça arrange vos petites affaires.