• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sendeiro

Rotina envio de mails

5 mensagens neste tópico

Boas a todos,

o dilema que me trás a cabeça às voltas ultimamente é o seguinte, quero criar uma rotina de envio de mails automática, por exemplo tenho uma listagem excel (na ordem dos milhares) com e-mail e data de nascimento, e tenho um modelo de e-mail (Parabéns... bláblá...) o que eu pretendo é uma forma de comparar a data actual com a data de nascimento e caso assim seja disparar um mail para a pessoa correspondente!

Espero que seja perceptivel o que estou a pedir... ;) ... o que é que sugerem???

Cumps (fico a aguardar contributos)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se não existir um programa que faça isso (o que duvido) faz tu um ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui vai uma sugestão, em Perl.

#!/usr/bin/perl 

use strict;
use warnings;

use Spreadsheet::ParseExcel;
use DateTime::Format::Excel;
use Email::Valid;
use Mail::Sendmail;

my $aniversariantes = get_aniversarios('aniversarios.xls');

if ($aniversariantes) {

    send_mail(
        {
            to      => 'me@example.com',
            bcc     => $aniversariantes,
            from    => 'me@example.com',
            message => <<"MSG",
Parabens a voce
nesta data querida
muitas felicidades
muitos anos de vida.
MSG
            subject => 'Parabens pa!',
            smtp    => 'mail.example.com',
        }
    );

}
else {
    print qq|Nao existem aniversariantes!\n|;
}

exit 0;

sub get_aniversarios {

    my $xls_file = shift;

    my $hoje = DateTime->today();

    my $excel = Spreadsheet::ParseExcel::Workbook->Parse($xls_file);

    my @aniversarios = ();

    #
    # As colunas sao:
    #
    # A: Nome
    # B: Email
    # C: Data de Nascimento (dd-mm-aaaa)
    #
    # --------|-------------------|----------
    #     A   |         B         |     C
    # --------|-------------------|----------
    # Ze maria zemaria@example.com 19-04-1970
    # manuela  manuela@example.com 28-07-1982
    # carlos   carlos@example.com  28-07-1975
    # ana      ana@example.com     01-02-1998
    # manel    manel@example.com   28-06-1954
    #

    my $sheet = $excel->{Worksheet}[0];
    $sheet->{MaxRow} ||= $sheet->{MinRow};

    foreach my $row ( $sheet->{MinRow} .. $sheet->{MaxRow} ) {

        my $data_nasc = DateTime::Format::Excel->parse_datetime(
            $sheet->{Cells}[$row][2]->{Val} );

        #
        # Se o dia e o mes da data de nascimento coincidem com o dia e o mes
        # actual; e se o e-mail e' valido...
        #
        next
          unless ( $hoje->day == $data_nasc->day
            && $hoje->month == $data_nasc->month
            && Email::Valid->address( $sheet->{Cells}[$row][1]->{Val} ) );

        push @aniversarios,
          qq|$sheet->{Cells}[$row][0]->{Val} <$sheet->{Cells}[$row][1]->{Val}>|;
    }

    return join ';', @aniversarios;
}

sub send_mail {

    my $defs = shift;
    sendmail(%$defs) or die $Mail::Sendmail::error;
    return;

}

... e pronto. É só meter na crontab. :-)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

muito obrigado slack_guy, vou tentar testar amanhã o script, depois digo como correu.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora