Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Un nuovo sistema di invio email #981

Closed
AlfioEmanueleFresta opened this issue Feb 9, 2014 · 24 comments · Fixed by #1039
Closed

Un nuovo sistema di invio email #981

AlfioEmanueleFresta opened this issue Feb 9, 2014 · 24 comments · Fixed by #1039

Comments

@AlfioEmanueleFresta
Copy link
Member

Sto lavorando al rifacimento del sistema di invio email, le caratteristiche sono queste:

  • Cambiata la libreria di invio email da quella di PEAR (abbandonata ed ormai obsoleta) a questa qui: https://github.com/Synchro/PHPMailer;
  • Supporto DKIM (come da @PaoloGiustiniani);
  • Implementazione di una coda di invio nel DB NoSQL (MongoDB);
  • Scrittura di un server di invio posta (da cronjob) che si esegua al cronjob ogni minuto per sfoltire la coda di invio;
@AlfioEmanueleFresta AlfioEmanueleFresta self-assigned this Feb 9, 2014
@luca-dex
Copy link
Contributor

luca-dex commented Feb 9, 2014

Una volta che c'è la base del sistema possiamo preparare la visualizzazione di posta in - posta out per l'utente?

@AlfioEmanueleFresta
Copy link
Member Author

Non sarebbe un problema. Tu vuoi conservare lo storico?

@luca-dex
Copy link
Contributor

luca-dex commented Feb 9, 2014

Si sarebbe utile. Per le email mandate a singoli è facile, per le email mandate a gruppi di persone andrebbe indicato il gruppo a cui è stata mandata (soci attivi cl lainate / gruppo attività formazione cp milano / ... )

Per la ricezione è abbastanza facile (mittente / destinatario)

@AlfioEmanueleFresta
Copy link
Member Author

Non abbiamo una anagrafica nel db NoSQL, che volevo mantenere slegato, quindi per ora una singola email conterra' solo roba tipo:

{
  "oggetto": "Tanta fuffa",
  "mittente": {
    "id": 218,
    "nome": "Alfio Emanuele Fresta",
    "email": "alfio.emanuele.f@gmail.com"
  },
  "invio": {
    "iniziato": true,
    "finito": false
  },
  "corpo": "<html> [...] </html>",
  "destinatari": [ 
    {
      "id": 1234,
      "nome": "Luca De Sano",
      "email": "luca.desano@cri.it",
      "ok": true
    },
    {
      "id": 56789,
      "nome": "Federico D'Urso",
      "email": "federico.durso@gmail.com",
      "ok": false
    },
    <...>
  }
}

Questo sfrutta il meraviglioso principio di hipsteria di MongoDB @ http://docs.mongodb.org/manual/core/index-single/#indexes-on-subdocuments

@luca-dex
Copy link
Contributor

Si.

Bisogna pensare come recupere brevemente utente->postaIn(). La cosa
migliore sarebbe via api coi limit per pagina sulla base della data di
invio / ricezione

Luca De Sano
Croce Rossa Italiana

tel: +39 333 7177338
On 10 Feb 2014 12:20, "Alfio Emanuele" notifications@github.com wrote:

Non abbiamo una anagrafica nel db NoSQL, che volevo mantenere slegato,
quindi per ora una singola email conterra' solo roba tipo:

{
"oggetto": "Tanta fuffa",
"mittente": {
"id": 218,
"nome": "Alfio Emanuele Fresta",
"email": "alfio.emanuele.f@gmail.com"
},
"corpo": " [...] ",
"destinatari": [
{
"id": 1234,
"nome": "Luca De Sano",
"email": "luca.desano@cri.it"
},
{
"id": 56789,
"nome": "Federico D'Urso",
"email": "federico.durso@gmail.com"
},
<...>
}}


Reply to this email directly or view it on GitHubhttps://github.com//issues/981#issuecomment-34621121
.

@AlfioEmanueleFresta
Copy link
Member Author

Via API con un bellissimo:

$posta = Posta::find([
  'destinatari' => [
    '$contains' => $me->id
  ]
])->sort(['_id' => -1])
->skip(50)
->limit(50);

Quanto e' meravigliosamente hipster!

(_id e' composto da 4 byte, i primi 2 son il timestamp dell'inserimento)

@AlfioEmanueleFresta
Copy link
Member Author

Il nuovo sistema di email e' ora funzionante, testati anche invii multipli ed allegati.

Nuove feature

  • E' ora possibile assegnare un array di destinatari (Persona) come destinatario email.
  • E' ora possibile accodare immediatamente l'email per invio futuro con ->accoda().
  • Se si fa debug, non e' necessario un server SMTP (sendmail o postfix van bene)

Testato anche invio di file, SMTP criptato ed invio multiplo.

Nuova configurazione
Da modificare la nuova configurazione core/conf/email.php.

Modifica dipendenze
Gaia non dipendera' piu' dalla libreria PEAR Net_Mail/Net_SMTP, in quanto il nuovo mailer e' del tutto integrato.

@AlfioEmanueleFresta
Copy link
Member Author

@PaoloGiustiniani saremmo pronti ad abilitare DKIM?

@AlfioEmanueleFresta
Copy link
Member Author

Da fare

  • [X] Gestore della coda in invio mailer.php con relativo cron;
  • [X] Cambiare le chiamate negli invii di massa da ->invia() ad ->accoda();
  • [X] Creare pannello di visualizzazione email in uscita / entrata

@PaoloGiustiniani
Copy link
Member

Lato DNS tutto ok.

Ti serve qualche chiave da implementare lato codice?

@luca-dex
Copy link
Contributor

Proposta: in home dell'utente mettiamo i primi 100 caratteri degli ultimi 10 messaggi ricevuti ognuno dento un alert block? Potrebbe essere anche una buona cosa da mettere sulla home dell'app, no? Rende il tutto più social. Poi se uno vuole leggere tutto viene rimandato alla sezione della posta IN posta OUT

@luca-dex
Copy link
Contributor

Cambiare da invia ad accoda e creare il pannello di visualizzazione della posta sono cose che posso fare io

@ciopper90
Copy link
Contributor

@luca-dex giusto stamattina ne parlavamo io e alfio di questa possibilita'
anche perche sarebbe una ottima home(altro che rss :P )

@AlfioEmanueleFresta
Copy link
Member Author

@PaoloGiustiniani ci sono da impostare queste tre cose:

  • identity (nel formato nome@dominio.tld)
  • domain
  • private (immagino una chiave privata...?)

Puoi crearmele/fornirmele?

@luca-dex, non so se nella home e' il caso, al limite un piccolo widget... vedremo... Nell'applicazione e' un'ottima home.

@luca-dex
Copy link
Contributor

Era per riempire la triste e vuota home attuale

Luca De Sano
Croce Rossa Italiana

tel: +39 333 7177338
On 14 Feb 2014 15:30, "Alfio Emanuele" notifications@github.com wrote:

@PaoloGiustiniani https://github.com/PaoloGiustiniani ci sono da
impostare queste tre cose:

  • identity (nel formato nome@dominio.tld)
  • domain
  • private (immagino una chiave privata...?)

Puoi crearmele/fornirmele?

@luca-dex https://github.com/luca-dex, non so se nella home e' il caso,
al limite un piccolo widget... vedremo... Nell'applicazione e' un'ottima
home.


Reply to this email directly or view it on GitHubhttps://github.com//issues/981#issuecomment-35087788
.

@AlfioEmanueleFresta
Copy link
Member Author

@luca-dex stupiscimi, fammi sognare <3

@luca-dex
Copy link
Contributor

Committerò tra un po' che ho inserito anche altra roba

Luca De Sano
Croce Rossa Italiana

tel: +39 333 7177338
On 14 Feb 2014 20:16, "Alfio Emanuele" notifications@github.com wrote:

@luca-dex https://github.com/luca-dex stupiscimi, fammi sognare <3


Reply to this email directly or view it on GitHubhttps://github.com//issues/981#issuecomment-35115148
.

@AlfioEmanueleFresta
Copy link
Member Author

@luca-dex
Copy link
Contributor

Bozza

download

@luca-dex
Copy link
Contributor

Altro pezzo della bozza

download

@AlfioEmanueleFresta
Copy link
Member Author

Fatto pannello.
Ora lavoro a mailer.php.

image
image
image

@ciopper90
Copy link
Contributor

Me le posso iniziare a gustare anche io oppure e ancora il caso che le ignoro???(visto che ci pensavo di implementare la home

luca-dex added a commit that referenced this issue Feb 26, 2014
@AlfioEmanueleFresta
Copy link
Member Author

@ciopper90, gia' puoi farlo. Ottieni tutto con un bel:

api('posta_cerca', {
  direzione: 'ingresso', // 'ingresso' oppure 'uscita'
  perpagina: 20,
  pagina: 1
}, function(x) { console.log(x); });

@AlfioEmanueleFresta
Copy link
Member Author

UPDATE Mailer pronto.
Basta aggiungere nel crontab una chiamata da terminale via php ogni minuto a mailer.php.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants