Send Boleto.net by email

Asked

Viewed 1,138 times

1

I have a console application that every day at dawn should send billets to customers, access and return BD ok, the system returns a list with all customer data/ Boleto, in the example of the code:

string vencimento = "2015-06-04 00:00:00.000";;
            String valorBoleto = "123.11";
            String numeroDocumento = "B20005446";

            //cedente
            String cedente_codigo = "1111111";
            String cedente_nossoNumeroBoleto = "22222222";
            String cedente_cpfCnpj = "123.456.789-01";
            String cedente_nome = "PAULO FREIRE - FOUR FREIRES INF.";
            String cedente_agencia = "1000";
            String cedente_conta = "22507";
            String cedente_digitoConta = "6";

            //sacado
            String sacado_cpfCnpj = "000.000.000-00";
            String sacado_nome = "JOÃO";
            String sacado_endereco = "RUA XV";
            String sacado_bairro = "";
            String sacado_cidade = "";
            String sacado_cep = "";
            String sacado_uf = "";

            Cedente cedente = new Cedente(cedente_cpfCnpj,
            cedente_nome,
            cedente_agencia,
            cedente_conta,
            cedente_digitoConta);

            cedente.Codigo = Convert.ToInt32(cedente_codigo);

            Boleto boleto = new Boleto(Convert.ToDateTime(vencimento), Convert.ToDouble(valorBoleto), "109",  cedente_nossoNumeroBoleto, cedente);
            boleto.NumeroDocumento = numeroDocumento;

            Sacado sacado = new Sacado(sacado_cpfCnpj, sacado_nome);
            boleto.Sacado = sacado;
            boleto.Sacado.Endereco.End = sacado_endereco;
            boleto.Sacado.Endereco.Bairro = sacado_bairro;
            boleto.Sacado.Endereco.Cidade = sacado_cidade;
            boleto.Sacado.Endereco.CEP = sacado_cep;
            boleto.Sacado.Endereco.UF = sacado_uf;

            Instrucao_Itau instrucao = new Instrucao_Itau();
            instrucao.Descricao = "Não Receber após o vencimento";

            boleto.Instrucoes.Add(instrucao);
            EspecieDocumento_Itau especie = new EspecieDocumento_Itau(99);
            boleto.EspecieDocumento = especie;

            BoletoBancario boleto_bancario = new BoletoBancario();
            boleto_bancario.CodigoBanco = 341;
            boleto_bancario.Boleto = boleto;
            boleto_bancario.MostrarCodigoCarteira = true;
            boleto_bancario.Boleto.Valida();

            boleto_bancario.MostrarComprovanteEntrega = true;


            pnl_dados.Visible = false;

            pnl_boleto.Controls.Add(boleto_bancario);

The problem is that I don’t know how to ATTACH the Boleto generated by this dll Boleto.net to the customer’s email, because the way it is the billet is loaded on the screen for printing.

2 answers

3


In Boleto.Net’s own Github has an example of how to send to email, to check just access src/Boleto.Net.Website.

Here is the example posted in .aspx, but you can adapt to your context.

protected MailMessage PreparaMail()
    {
        MailMessage mail = new MailMessage();
        mail.To.Add(new MailAddress(TextBox1.Text));
        mail.Subject = "Teste de envio de Boleto Bancário";
        mail.IsBodyHtml = true;
        mail.Priority = MailPriority.High;
        return mail;
    }

    protected BoletoBancario PreparaBoleto()
    {
        DateTime vencimento = new DateTime(2007, 9, 10);

        Instrucao_Itau item1 = new Instrucao_Itau(9, 5);
        Instrucao_Itau item2 = new Instrucao_Itau(81, 10);
        Cedente c = new Cedente("00.000.000/0000-00", "Empresa de Atacado", "0542", "13000");
        //Na carteira 198 o código do Cedente é a conta bancária
        c.Codigo = "13000";

        Boleto b = new Boleto(vencimento, 1642, "198", "92082835", c);
        b.NumeroDocumento = "1008073";

        b.Sacado = new Sacado("000.000.000-00", "Fulano de Silva");
        b.Sacado.Endereco.End = "SSS 154 Bloco J Casa 23";
        b.Sacado.Endereco.Bairro = "Testando";
        b.Sacado.Endereco.Cidade = "Testelândia";
        b.Sacado.Endereco.CEP = "70000000";
        b.Sacado.Endereco.UF = "DF";

        item2.Descricao += " " + item2.QuantidadeDias.ToString() + " dias corridos do vencimento.";
        b.Instrucoes.Add(item1);
        b.Instrucoes.Add(item2);



        BoletoBancario itau = new BoletoBancario();
        itau.CodigoBanco = 341;
        itau.Boleto = b;

        return itau;
    }


    protected void Button1_Click(object sender, EventArgs e)
    {


        BoletoBancario  itau = PreparaBoleto();
        MailMessage mail = PreparaMail();

        if (RadioButton1.Checked)
        {
            mail.Subject += " - On-Line";
            Panel1.Controls.Add(itau);

            System.IO.StringWriter sw = new System.IO.StringWriter();
            HtmlTextWriter htmlTW = new HtmlTextWriter(sw);
            Panel1.RenderControl(htmlTW);
            string html = sw.ToString();
            //
            mail.Body = html;
        }
        else
        {
            mail.Subject += " - Off-Line";
            mail.AlternateViews.Add(itau.HtmlBoletoParaEnvioEmail());
        }

        MandaEmail(mail);
        Label1.Text = "Boleto simples enviado para o email: " + TextBox1.Text;
    }
    protected void Button1_Click2(object sender, EventArgs e)
    {

        BoletoBancario itau = PreparaBoleto();

        // embora estou mandando o mesmo boleto duas vezes, voce pode obviamente mandar boletos distintos
        BoletoBancario[] arrayDeBoletos = new BoletoBancario[] { itau, itau };
        AlternateView  av = BoletoBancario.GeraHtmlDeVariosBoletosParaEmail("Isto é um email com <b>dois</b> boletos", arrayDeBoletos);

        MailMessage  mail = PreparaMail();
        mail.Subject += " - Off-Line - Múltiplo";
        mail.AlternateViews.Add(av);

        MandaEmail(mail);
        Label1.Text = "Boleto múltimplo enviado para o email: " + TextBox1.Text;
    }


    void MandaEmail(MailMessage mail)
    {
        SmtpClient objSmtpClient = new SmtpClient();

        objSmtpClient.Host = "smtp.dominio.com.br";
        objSmtpClient.Port = 25;
        objSmtpClient.EnableSsl = false;
        objSmtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "123456");
        objSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
        objSmtpClient.Timeout = 10000;
        objSmtpClient.Send(mail);
    }
  • Perfect! but the barcode is not shown completely...another question: I see for other banks just instantiate again the class BoletoBancario BB = new BoletoBancario() and other particularities in relation to the Instructions, etc;

1

I’m going through something like this, what I did was first save the HTML of the boleto generated on disk, and then use it, in my case I have to climb it to the Storage of Azure. In case the email would just change to insert the generated file in the attachment.

To save the file to disk I used the nuget package Pechkin.

Below is an example of the code:

public void SalvarPdfEmDisco(string htmlBoleto, string nomeArquivo, out string caminhoBoleto)
{
    byte[] pdfBuf = new SimplePechkin(new Pechkin.GlobalConfig()).Convert(htmlBoleto);

    caminhoBoleto = "C:\\boletos\\" + nomeArquivo + ".pdf";

    File.WriteAllBytes(caminhoBoleto, pdfBuf);
}

Then just pass the path of the returned file in the method to the method responsible for sending the email.

protected MailMessage EnviaEmail(string caminhoArquivo)
{
    MailMessage mail = new MailMessage();
    mail.To.Add(new MailAddress("[email protected]"));
    mail.Subject = "Envio de Boleto Bancário";
    mail.IsBodyHtml = true;
    mail.Priority = MailPriority.High;
    mail.Attachments.Add(new Attachment(caminhoArquivo));
    return mail;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.