Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre chevronné
    uploader une image sur son serveur en l'envoyant à un mail donné
    Bonjour,
    Je cherche à envoyer une image sur mon serveur tout simplement en envoyant cette image à une adresse mail donnée
    reliée à mon nom de domaine.
    Cette image irait toujours au même endroit.

    Apparemment ce qui se fait et ce que j'ai trouvé, c'est d'envoyer un mail donné et ... un cron régulier sur le serveur prendrait l'image attachée pour la transférer au bon endroit ...
    ... mais techniquement je manque de connaissances/billes pour faire cette partie !?

    Bref le + simple sera le mieux

    Un peu d'aide ou piste pour démarrer serait bienvenu

    Merci d'avance

    Laurent
    Il ne pleut jamais en Moselle !

  2. #2
    Membre confirmé
    Si j'ai bien compris ce que tu expliques, pourquoi ne pas créer une page pour l'upload de ton image qui ferait ce traitement ?


    Ou alors, regarde du côté des fonctions IMAP de PHP.

    https://www.php.net/manual/fr/ref.imap.php

  3. #3
    Membre chevronné
    Merci pour ta réponse,
    J'utilise déjà ce type de fonctionnalité avec un plugin wordpress pour poster un nouvel article, je mets dans ma messagerie, une adresse mail spécifique, un titre et ce que je veux dans le corps du message et cet article apparaît sur le blog direct.

    Par mail, ça me parait vraiment très pratique au quotidien et c'est ça que je recherche.
    Je vais regarder ton lien et je reviens ...
    Il ne pleut jamais en Moselle !

  4. #4
    Modérateur

    imap est bien la solution au problème.
    En gros ton serveur php va à intervalle régulier lire les mails non lu et en extrait le contenu.
    Il faudra surement formaliser un peu les mails pour ne pas lire des spam par exemple , décider si ton images est embedded ou en pièce jointe (surement plus simple).

    Par contre c'est beaucoup de boulot par rapport à un simple formulaire d'upload.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre chevronné
    Citation Envoyé par grunk Voir le message
    imap est bien la solution au problème.
    En gros ton serveur php va à intervalle régulier lire les mails non lu et en extrait le contenu.
    Il faudra surement formaliser un peu les mails pour ne pas lire des spam par exemple , décider si ton images est embedded ou en pièce jointe (surement plus simple).

    Par contre c'est beaucoup de boulot par rapport à un simple formulaire d'upload.
    Oui ça demande + de boulot mais d'un autre coté, ça sera aussi formateur, l'image sera en pièce jointe ... le traitement finalisé me prendra l'images (2-3 Mo) et me réduira l'images avec 300/400 px max sur la largeur ou hauteur et permettra de dynamiser un petit site ... par exemple.
    Si ça fonctionne bien je pourrais sans doute récupérer l'objet et le texte du mail ...
    Il ne pleut jamais en Moselle !

  6. #6
    Membre chevronné
    Bon voilà ce que j'ai trouvé adapté et fait et qui marche pour moi ...
    C'est du brut de fonderie car je vais l'utiliser pour un petit site sans prétention ...
    J'ai donc au préalable créer une boite mail "spécial" qui ne sert qu'à acheminer une image dans un répertoire donné.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
     
    set_time_limit(3000); 
     
    $hostname="{mail.mondomaine.org:143/novalidate-cert}INBOX"; // voir http://fr.php.net/imap_open
    $username="maboitemail@mondomaine.org"; //imap login
    $password="aloevera"; //imap password
    $folder = "/home/.../monrep";
    set_time_limit(3000); 
     
     
    /* try to connect */
    $inbox = imap_open($hostname,$username,$password) or die('Cannot connect : ' . imap_last_error());
    $emails = imap_search($inbox, 'UNSEEN');
    /* if any emails found, iterate through each email */
    echo 'depart';    
     
    if($emails) {
     
        $count = 1;
     
        /* put the newest emails on top */
        rsort($emails);
     
        /* for every email... */
        foreach($emails as $email_number) 
        {
     
            /* get information specific to this email */
            $overview = imap_fetch_overview($inbox,$email_number,0);
     
            $message = imap_fetchbody($inbox,$email_number,2);
     
            /* get mail structure */
            $structure = imap_fetchstructure($inbox, $email_number);
     
            $attachments = array();
     
            /* if any attachments found... */
            if(isset($structure->parts) && count($structure->parts)) 
            {
                for($i = 0; $i < count($structure->parts); $i++) 
                {   $attachments[$i] = array(
                        'is_attachment' => false,
                        'filename' => '',
                        'name' => '',
                        'attachment' => ''
                    );
     
                    if($structure->parts[$i]->ifdparameters) 
                    {
                        foreach($structure->parts[$i]->dparameters as $object) 
                        {
                            if(strtolower($object->attribute) == 'filename') 
                            {
                                $attachments[$i]['is_attachment'] = true;
                                $attachments[$i]['filename'] = $object->value;
                            }
                        }
                    }
     
                    if($structure->parts[$i]->ifparameters) 
                    {
                        foreach($structure->parts[$i]->parameters as $object) 
                        {
                            if(strtolower($object->attribute) == 'name') 
                            {
                                $attachments[$i]['is_attachment'] = true;
                                $attachments[$i]['name'] = $object->value;
                            }
                        }
                    }
     
                    if($attachments[$i]['is_attachment']) 
                    {
                        $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);
     
                        /* 3 = BASE64 encoding */
                        if($structure->parts[$i]->encoding == 3) 
                        { 
                            $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                        }
                        /* 4 = QUOTED-PRINTABLE encoding */
                        elseif($structure->parts[$i]->encoding == 4) 
                        { 
                            $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                        }
                    }
                }
            }
     
            /* iterate through each attachment and save it */
            foreach($attachments as $attachment)
            {
                if($attachment['is_attachment'] == 1)
                {
                    $filename = $attachment['name'];
                    if(empty($filename)) $filename = $attachment['filename'];
                    if(empty($filename)) $filename = time() . ".dat";
                    $ext = pathinfo($filename, PATHINFO_EXTENSION);
                    if (($ext == "jpg") or ($ext == "JPG")) {
                        $fp = fopen($folder ."/". "monnomimage.jpg", "w+");
                        fwrite($fp, $attachment['attachment']);
                        fclose($fp);
                        $imagesize = getimagesize($folder ."/". "monnomimage.jpg");
                        $width_orig = $imagesize[0];
                        $height_orig = $imagesize[1];
     
                        $dst_w = 600;
     
                        if($width_orig != $dst_w){
     
                            $dst_h_multiplier = $dst_w / $width_orig;
                            $dst_h = $dst_h_multiplier * $height_orig;
     
                            $dst = imagecreatetruecolor($dst_w, $dst_h);
                            $image = imagecreatefromjpeg($folder ."/". "monnomimage.jpg");
                            imagecopyresampled($dst, $image, 0, 0, 0, 0, $dst_w, $dst_h ,$width_orig, $height_orig);
     
                            imagejpeg($dst,$folder ."/". "monnomimagecompress.jpg",80);
                        }            
     
                    }            
                }
            }
        }
     
    } 
     
    /* close the connection */
    imap_close($inbox, CL_EXPUNGE);
     
    echo "all attachment Downloaded";


    Mes remarques
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $hostname="{mail.mondomaine.org:143/novalidate-cert}INBOX"; // voir http://fr.php.net/imap_open

    si je ne mets pas novalidate-cert alors je n'arrive pas à parcourir ma boite mail ...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $emails = imap_search($inbox, 'UNSEEN');

    Le UNSEEN c'est pour récupérer la/les dernières images mais je ne vais en garder qu'UNE ... (écrasement successif si on envoie 3 mails à la suite)

    Ce bout de code sert à prendre la pièce jointe si c'est une image (jpg) et qui a été renommée alors en monnomimage.jpg ...
    ... la réduire à la taille de 600 * ... (respect des proportions) puis de la renommer avec le nom définitif de l'image que j'utilise sur ma page web ...
    (... et la compresser au passage avec une qualité de 80%)

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $imagesize = getimagesize($folder ."/". "monnomimage.jpg");
                        $width_orig = $imagesize[0];
                        $height_orig = $imagesize[1];
     
                        $dst_w = 600;
     
                        if($width_orig != $dst_w){
     
                            $dst_h_multiplier = $dst_w / $width_orig;
                            $dst_h = $dst_h_multiplier * $height_orig;
     
                            $dst = imagecreatetruecolor($dst_w, $dst_h);
                            $image = imagecreatefromjpeg($folder ."/". "monnomimage.jpg");
                            imagecopyresampled($dst, $image, 0, 0, 0, 0, $dst_w, $dst_h ,$width_orig, $height_orig);
     
                            imagejpeg($dst,$folder ."/". "monnomimagecompress.jpg",80);


    Ensuite j'ai paramétré un cron sur mon serveur mutualisé qui lance le php toute les x minutes et ça a l'air de fonctionner.


    Le but était je le répète de "dynamiser" une page web sans se prendre la tête, tu indiques un mail particulier, tu joins une images et HOP ?
    Autre utilité , il est plus facile/discret au boulot d'envoyer une image à une adresse mail externe que de se connecter à un site particulier en utilisant un formulaire (mais je peux me tromper sur la discrétion )
    Il ne pleut jamais en Moselle !

  7. #7
    Modérateur

    il est plus facile/discret au boulot d'envoyer une image à une adresse mail externe
    Dans ce cas là prend soin de marque ton email comme personnel (genre avec un [Perso] dans le titre). Sinon c'est considéré comme du travail et peut être lu et potentiellement retenu contre toi.
    Au contraire une correspondance perso , n'a pas le droit d'être lue. Il est difficile de reprocher une utilisation personnel des email si ca reste raisonnable.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre chevronné
    Citation Envoyé par grunk Voir le message
    Dans ce cas là prend soin de marque ton email comme personnel (genre avec un [Perso] dans le titre). Sinon c'est considéré comme du travail et peut être lu et potentiellement retenu contre toi.
    Au contraire une correspondance perso , n'a pas le droit d'être lue. Il est difficile de reprocher une utilisation personnel des email si ca reste raisonnable.
    Merci Grunk,
    De toute façon un rappel ça ne fait jamais de mal ! et on va oublier cette proposition de ma part "malhonnête"

    En fait je parlais pour les autres éventuellement, .... comme je suis passé en SSII par Banque, Assurance etc. je ne me suis jamais considéré comme "chez moi" et donc j'ai toujours été en mode boulot au boulot (normal on pourrait dire mais des fois on est dans un environnement faux-jeton sans le réaliser, je dis pas ça méchamment mais faut pas être con aussi ... des qu'il y a des histoire de sous et de contrat c'est ainsi) ... et encore aujourd'hui en interne je ne blague pas avec la frontière boulot/privé.

    Parfois on ne se rend pas compte de toutes la masse d'informations qu'on a sur soi dans sa boite, le pointage, les mails, etc. bref quand on veut planter quelqu'un : ON LE PLANTE
    Il ne pleut jamais en Moselle !