Invio mail con Flutter Seconda parte

Bene, ci eravamo lasciati con un layout di App abbastanza definito, ma con una App decisamente non funzionale. Avevamo il nostro bottone ( che non faceva ancora nulla ) e nessun tipo di parametro mail configurato per permetterci di inviare la mail.

E allora, partiamo proprio da questo e andiamo ad inserire il codice che utile a configurare il nostro messaggio.

Ci posizionaimo subito dentro alla classe _HomeState e subito dopo la parentesi { andiamo ad aprire la nostra funzione mail() che dovrà contenere le informizoni utili a comporre una mail, quindi il "subject" il "corpo" il "destinatario" della mail e anche il "mittente".

il codice completo:

void mail() async {

    final String username = 'LA TUA MAIL'; // username OVH account mail
    final String password = 'LA TUA PASSWORD'; // password OVH account mail
    final smtpServer = ovh(username, password);

    final message = Message()
      ..from = Address(username, 'NOME DA VISUALIZZARE NELLA MAIL') 
      ..recipients.add('DESTINATARIO MAIL') 
      ..subject = 'OGGETTO DELLA MAIL' 
      ..text = 'This is the plain text.\nThis is line 2 of the text part.'
      ..html = "<h1>Test</h1>\n<p>Hey! Here's some HTML content</p>"

    // Invio messaggio e recupero errori/report
    try {
      final sendReport = await send(message, smtpServer);
      print('Message sent: ' + sendReport.toString());
    } on MailerException catch (e) {
      print('Message not sent.');
      print(e.toString());
      for (var p in e.problems) {
        print('Problem: ${p.code}: ${p.msg}');
      }
    }
  }

Questa è banalmente la funzione che compone il messaggio mail e lo invia sfruttando il server SMTP configurato grazie alle prime tre line di codice.

Aggiungiamo adesso la funzione ovh() perche in questo caso stiamo usando ovh.. ma potreste gestire la cosa anche con altri provider. (il package mailer ne ha già diversi configurati, tra i quali gmail, che presenta qualche difficoltà per via delle modifiche che Google ha fatto alla sicurezza e privacy degli account mail.)

Inseriamo quindi il codice che manca per la configurazione del server smtp, e lo inseriamo subito prima della funzione mail()

SmtpServer ovh(String username, String password) { 
    SmtpServer('ssl0.ovh.net', username: username, password: password); 
}

E' qui che definiamo l'indirizzo SMTP dl server e i parametri richiesti per configurarlo.

Quello che vediamo adesso è un elenco lunghissimo di sottolineati in rosso. (erroi errori ed ancora errori ) ma niente paura, ci sono solo perchè non abbiamo ancora inserito il package nel file pubspec.yaml

Apriamolo e andiamo ad aggiunger eil package mailer inserendo questa linea sotto a cupertino:icons:

cupertino_icons: ^0.1.3
mailer: ^3.0.4

Da ricordare che nel tempo le versioni cambiano, andate sempre a verificare la versione ultima disponibile sui DART PACKAGES

Clicchiamo su "Pubget"

aggiungiamo nel nostro file main.dart l'import a mailer subito sotto agli altri import del file (ovvero all'inizio del file

import 'package:mailer/mailer.dart';

e i nostri erori saranno scomparsi... Questo non vuol dire che sia tutto pronto. Per questo esperimento, manca ancora la chiamata alla funzione nel layout della nostra app, perche a questo punto è tutto pronto, ma nulla accade se non mettiamo il trigger nel nostro bottone.

body: Center(
            child: FlatButton(
            onPressed () {

                // INSERIAMO QUI LA CHIAMATA ALL FUNZIONE
                mail();

            };
            child: Text('Invio Mail'),
            ),
        );

Adesso la nostra App è operativa, anche se cliccando il bottone andremo a mandare una mail con i parametri impostati all'intenro di mail() e non con un bel form.... ma questo lo affronteremo più avanti...

Posted in Dev on Jun 23, 2020