20 de set. de 2023

Script enviar email de acordo com uma coluna da planilha

O script está funcionando para enviar o email, porem não consigo fazer com que o titulo e corpo do email seja enviado de acordo com o que está escrito na planilha, o script que estou usando é /**********************************************
* EnviaEmail()
*
* Dispara mensagens por e-mail quando houver
* determinada alteração em células de uma
* coluna específica
*
* 10/12/2020
**********************************************/
var nomeAba = "Sheet1"; // Nome da aba que será monitorada;
var colunaEmail = 2; // Coluna B, onde está o e-mail do destinatário
var colunaMonitor = 14; // Coluna N, que será monitorada
var colunaOK = 16; // Coluna P, onde será registrado se o e-mail foi enviado corretamente
var valor = "NÃO"; // valor da célula para que o e-mail seja enviado;
 
function EnviaEmail(e){
  var resultado,destinatario;
  var assunto = "Título do e-mail";
  var mensagem = "Corpo do texto <br>que pode conter comandos <b>HTML</b>";
  var aba = e.source.getActiveSheet();
  var celula = e.range;
  if(aba.getName()==nomeAba && celula.getColumn()==colunaMonitor && celula.getValue()==valor){
    destinatario = aba.getRange(celula.getRow(),colunaEmail).getValue();
    try {
      MailApp.sendEmail({
        to:destinatario,
        subject:assunto,
        htmlBody:mensagem
      })
      resultado = "Enviado";
    } catch(erro) {
      resultado = erro;
    }
    aba.getRange(celula.getRow(),colunaOK).setValue(resultado);
    SpreadsheetApp.flush();
  }  
}
Bloqueada
Esta pergunta está bloqueada, e o envio de respostas foi desativado.
O conteúdo da Comunidade pode não ter sido verificado ou atualizado. Saiba mais.
Resposta recomendada
26 de out. de 2023
Olá

Desculpa a demora em atualizar o tópico.

Eu tive uma pequena dificuldade em encontrar uma solução para a sua demanda então eu pedi a ajuda do Expert Michel para me auxiliar.

Agora o código está atendendo as 4 demandas.

  • Enviar e-mail sem cópia e sem link de PDF.
  • Enviar e-mail sem cópia e com link de PDF.
  • Enviar e-mail com cópia e com link de PDF.
  • Enviar e-mail com cópia e sem link de PDF.

function email() {
  // Definição de constantes e variáveis iniciais
  const TABELA = "Painel"; // Nome da planilha
  const linhaINICIAL = 1; // Linha inicial da planilha
  const colunaENVIO = 11; // Coluna que contém o status de envio
  const colunaSTATUS = 12; // Coluna que contém o status atual
  const textoCONDICAO = "SIM"; // Texto de condição para envio
  const textoENVIADO = "ENVIADO"; // Texto de status "enviado"

  // Função para extrair o ID do link do Google Drive
  function pegalink(link) {
    const match = link.match(/\/d\/([a-zA-Z0-9-_]+)/);
    if (match) {
      return match[1];
    }
    return null;
  }

  // Obtém a planilha ativa
  const planilha = SpreadsheetApp.getActiveSpreadsheet();
  const aba1 = planilha.getSheetByName(TABELA);

  // Obtém um intervalo de dados na planilha
  const intervalo = aba1.getRange(linhaINICIAL, 1, aba1.getLastRow() - linhaINICIAL + 1, colunaSTATUS);
  const dados = intervalo.getValues();

  // Loop pelos dados na planilha
  for (let i = 0; i < dados.length; ++i) {
    if (dados[i][colunaENVIO - 1] === textoCONDICAO && dados[i][colunaSTATUS - 1] !== textoENVIADO) {
      // Extrai informações da linha de dados
      const email = dados[i][0];
      const cc1 = dados[i][4];
      const cc2 = dados[i][5];
      const assun = dados[i][7];
      const titulo = dados[i][6];
      const anexoLink = dados[i][8];

      // Monta informações para o email
      let copiaoculta;

      if (cc1 != '') {
        copiaoculta = cc1
      }

      if (cc2 != '') {
        copiaoculta = `${cc1}, ${cc2}`
      }

      const fileId = pegalink(anexoLink);
      const subject = `Faturamento ${titulo}`;
      const message = `
          <font size='3' face='Comfortaa'> Olá, tudo bem? </font><br>
          <font size='3' face='Comfortaa'>${assun}</font><br>
          <font size='3' face='Comfortaa'> Atenciosamente Time de Backoffice Comercial.</font><br><br>`;

      let emailEnviado = false;

      // Verifica se deve ser enviada uma cópia oculta e se há um arquivo anexado
      if (!copiaoculta) {
        if (fileId) {
          const pdfFile = DriveApp.getFileById(fileId);
          // Envia o email sem cópia oculta e com um anexo
          MailApp.sendEmail(email, subject, message, {
            htmlBody: message,
            name: 'Google Community',
            attachments: [pdfFile.getAs(MimeType.PDF)],
            noReply: true,
          });
        } else {
          // Envia o email sem cópia oculta e sem anexo
          MailApp.sendEmail(email, subject, message, {
            htmlBody: message,
            name: 'Google Community',
            noReply: true,
          });
        }
        emailEnviado = true;
      } else {
        if (fileId) {
          const pdfFile = DriveApp.getFileById(fileId);
          // Envia o email com cópia oculta e com um anexo
          console.log(copiaoculta)
          MailApp.sendEmail(email, subject, message, {
            htmlBody: message,
            bcc: copiaoculta,
            name: 'Google Community',
            attachments: [pdfFile.getAs(MimeType.PDF)],
            noReply: true,
          });
        } else {
          // Envia o email com cópia oculta e sem anexo
          MailApp.sendEmail(email, subject, message, {
            htmlBody: message,
            bcc: copiaoculta,
            name: 'Google Community',
            noReply: true,
          });
        }
        emailEnviado = true;
      }

      // Atualiza o status na planilha e encerra o código após o envio de um email
      if (emailEnviado) {
        aba1.getRange(linhaINICIAL + i, colunaSTATUS).setValue(textoENVIADO);
        SpreadsheetApp.flush();
        return;
      }
    }
  }
}



Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert

Michel Hazuky (Expert em Produtos Diamante (EP Diamante)) recomendou isto
Elogio enviado por Karina Monteiro 321:
Preciso
Útil?
Resposta recomendada
21 de set. de 2023
Olá

Esse código é um que eu uso nas minhas planilhas.

const email = dados[i][3];
const id = dados[i][0];
const assun = dados[i][4];

No lugar de um var (variável) usamos um const (constante) que recebe ( = ) os dados que estão dentro de um vetor ( [ ] ) na posição 3 .
No vetor as colunas começam com 0 (zero), a coluna A é o 0.

A id e o assun(to) seguem a mesma ideia.


Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert


Mário Lúcio (Expert em Produtos Diamante (EP Diamante)) recomendou isto
Útil?
Resposta recomendada
21 de set. de 2023
Olá
​Experimenta esse código aqui lembra de mudar os apontamentos.

function email() {
  const TABELA = "Painel";
  const linhaINICIAL = 2;
  const colunaENVIO = 12;
  const colunaSTATUS = 14;
  const textoCONDICAO = "Enviar";
  const textoENVIADO = "ENVIADO";

  const planilha = SpreadsheetApp.getActiveSpreadsheet();
  const aba1 = planilha.getSheetByName(TABELA);
  const intervalo = aba1.getRange(linhaINICIAL, 1, aba1.getLastRow() - linhaINICIAL + 1, colunaSTATUS);
  const dados = intervalo.getValues();

  for (let i = 0; i < dados.length; ++i) {
    if (dados[i][colunaENVIO - 1] === textoCONDICAO && dados[i][colunaSTATUS - 1] !== textoENVIADO) {
    
      const email = dados[i][3];
      const id = dados[i][0];
      const assun = dados[i][4];
      const subject = `Solicito, ${assun}`;

      const message = `
        <font size='3' face='Comfortaa'> Olá, foi aberto o chamado <b>${assun}</b></font><br>
        <font size='3' face='Comfortaa'> O código dele é <b>${id}</b></font><br>
        <font size='3' face='Comfortaa'> Assim que solucionado você receberá um e-mail com o parecer.</font><br><br>`;

      MailApp.sendEmail(email, subject, message, {
        htmlBody: message,
        name: 'Google Community',
        noReply: true,
      });
      aba1.getRange(linhaINICIAL + i, colunaSTATUS).setValue(textoENVIADO);
      SpreadsheetApp.flush();
    }
  }
}


Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert


Mário Lúcio (Expert em Produtos Diamante (EP Diamante)) recomendou isto
Útil?
Todas as respostas (10)
Resposta recomendada
21 de set. de 2023
Olá
​Experimenta esse código aqui lembra de mudar os apontamentos.

function email() {
  const TABELA = "Painel";
  const linhaINICIAL = 2;
  const colunaENVIO = 12;
  const colunaSTATUS = 14;
  const textoCONDICAO = "Enviar";
  const textoENVIADO = "ENVIADO";

  const planilha = SpreadsheetApp.getActiveSpreadsheet();
  const aba1 = planilha.getSheetByName(TABELA);
  const intervalo = aba1.getRange(linhaINICIAL, 1, aba1.getLastRow() - linhaINICIAL + 1, colunaSTATUS);
  const dados = intervalo.getValues();

  for (let i = 0; i < dados.length; ++i) {
    if (dados[i][colunaENVIO - 1] === textoCONDICAO && dados[i][colunaSTATUS - 1] !== textoENVIADO) {
    
      const email = dados[i][3];
      const id = dados[i][0];
      const assun = dados[i][4];
      const subject = `Solicito, ${assun}`;

      const message = `
        <font size='3' face='Comfortaa'> Olá, foi aberto o chamado <b>${assun}</b></font><br>
        <font size='3' face='Comfortaa'> O código dele é <b>${id}</b></font><br>
        <font size='3' face='Comfortaa'> Assim que solucionado você receberá um e-mail com o parecer.</font><br><br>`;

      MailApp.sendEmail(email, subject, message, {
        htmlBody: message,
        name: 'Google Community',
        noReply: true,
      });
      aba1.getRange(linhaINICIAL + i, colunaSTATUS).setValue(textoENVIADO);
      SpreadsheetApp.flush();
    }
  }
}


Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert


Mário Lúcio (Expert em Produtos Diamante (EP Diamante)) recomendou isto
21 de set. de 2023
Olá, não entendi muito bem está parte const email = dados[i][3];
      const id = dados[i][0];
      const assun = dados[i][4];
      const subject = `Solicito, ${assun}`;
eu altero de acordo com a coluna da planilha?
Resposta recomendada
21 de set. de 2023
Olá

Esse código é um que eu uso nas minhas planilhas.

const email = dados[i][3];
const id = dados[i][0];
const assun = dados[i][4];

No lugar de um var (variável) usamos um const (constante) que recebe ( = ) os dados que estão dentro de um vetor ( [ ] ) na posição 3 .
No vetor as colunas começam com 0 (zero), a coluna A é o 0.

A id e o assun(to) seguem a mesma ideia.


Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert


Mário Lúcio (Expert em Produtos Diamante (EP Diamante)) recomendou isto
5 de out. de 2023
Eu consigo colocar duas pessoas em copia e enviar arquivos?
5 de out. de 2023
Olá

bcc é o argumento responsavel por enviar o "com copia"

No exemplo abaixo temos o bcc: 'teu-email@gmail.com', é assim que ele tem que ficar.

      MailApp.sendEmail(email, subject, message, {
        htmlBody: message,
        bcc: 'teu-email@gmail.com',
        name: 'Google Community',
        noReply: true,
      });

Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert

5 de out. de 2023
e para o envio de arquivos colocados na planilha, como coloco?

6 de out. de 2023
está dando erro, consegue me ajudar https://docs.google.com/spreadsheets/d/1wp1lc-AF1dXm-NmLS36meaHvh_ZGwmUD_7VgtUicPx0/edit?usp=sharing
5 de out. de 2023
Olá

Eu não entendi, como assim pegar arquivos da planilha??

Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert

6 de out. de 2023
por exemplo coloco um pix na planilha e quero que seja enviado no email 
6 de out. de 2023
Olá

O pix é um PDF ou uma imagem??

Qual é a ideia completa do projeto.

Me passando a ideia completa e não fragmentada fica mais fácil de pensar em uma solução.



Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert

6 de out. de 2023
seria enviar email, para 3 pessoas, com um texto e um pix em PDF para que seja passado para o cliente realizar o pagamento do pix 
9 de out. de 2023
Olá, Karina Monteiro 321, seja bem vindo a comunidade Editores de Documentos Google

Por favor, poderia seguir estes passos para compartilhar sua Planilha? Dessa forma poderemos ajudá-lo.

Se ela tiver dados sensíveis sugiro criar uma copia com dados fictícios (liberado para edição), apenas com a tua estrutura para podermos entender e assim poder lhe ajudar na sua necessidade.
 
Lembrando que dados sensíveis seriam; nomes completos, números de telefone, e-mails, dados bancários, ...
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert
9 de out. de 2023
10 de out. de 2023
Olá

atualizei o código

function email() {
  const TABELA = "Painel";
  const linhaINICIAL = 1;
  const colunaENVIO = 11;
  const colunaSTATUS = 12;
  const textoCONDICAO = "Sim";
  const textoENVIADO = "ENVIADO";

  function pegalink(link) {
    const match = link.match(/\/d\/([a-zA-Z0-9-_]+)/);
    if (match) {
      return match[1];
    }
    return null;
  }

  const planilha = SpreadsheetApp.getActiveSpreadsheet();
  const aba1 = planilha.getSheetByName(TABELA);
  const intervalo = aba1.getRange(linhaINICIAL, 1, aba1.getLastRow() - linhaINICIAL + 1, colunaSTATUS);
  const dados = intervalo.getValues();

  for (let i = 0; i < dados.length; ++i) {
    if (dados[i][colunaENVIO - 1] === textoCONDICAO && dados[i][colunaSTATUS - 1] !== textoENVIADO) {

      const email = dados[i][0];
      const cc1 = dados[i][4];
      const cc2 = dados[i][5];
      //      const cc = 'copia-oculta@gmail.com',
      const assun = dados[i][7];
      const titulo = dados[i][6];
      const anexoLink = dados[i][8];

      const copiaoculta = cc1 + "," + cc2;

      const fileId = pegalink(anexoLink);

      if (fileId) {
        const pdfFile = DriveApp.getFileById(fileId);

        const subject = `Faturamento ${titulo}`;

        const message = `
          <font size='3' face='Comfortaa'> Olá, tudo bem? </b></font><br>
          <font size='3' face='Comfortaa'>${assun}<b></b></font><br>
          <font size='3' face='Comfortaa'> Atenciosamente Time de Backoffice Comercial.</font><br><br>`;

        MailApp.sendEmail(email, subject, message, {
          htmlBody: message,
          bcc: copiaoculta,
          name: 'Google Community',
          attachments: [pdfFile.getAs(MimeType.PDF)],
          noReply: true,
        });
        aba1.getRange(linhaINICIAL + i, colunaSTATUS).setValue(textoENVIADO);
        SpreadsheetApp.flush();
      } else {
        Logger.log("Link do Google Drive inválido:", anexoLink);
      }
    }
  }
}

Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert

11 de out. de 2023
É obrigatório ter o arquivo?
11 de out. de 2023
Olá

Faz um teste enviando com o link e sem o link pra ver o que acontece.

Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert

16 de out. de 2023
oi, fiz o teste e só vai com o arquivo, preciso que enviei o email com e sem arquivo
16 de out. de 2023
Olá

Eu não entendi muito bem.

Se tiver link ele tá enviando?? 
E se não tiver o link ele não envia??

É isso???


Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert

16 de out. de 2023
Isso mesmo 
Resposta recomendada
26 de out. de 2023
Olá

Desculpa a demora em atualizar o tópico.

Eu tive uma pequena dificuldade em encontrar uma solução para a sua demanda então eu pedi a ajuda do Expert Michel para me auxiliar.

Agora o código está atendendo as 4 demandas.

  • Enviar e-mail sem cópia e sem link de PDF.
  • Enviar e-mail sem cópia e com link de PDF.
  • Enviar e-mail com cópia e com link de PDF.
  • Enviar e-mail com cópia e sem link de PDF.

function email() {
  // Definição de constantes e variáveis iniciais
  const TABELA = "Painel"; // Nome da planilha
  const linhaINICIAL = 1; // Linha inicial da planilha
  const colunaENVIO = 11; // Coluna que contém o status de envio
  const colunaSTATUS = 12; // Coluna que contém o status atual
  const textoCONDICAO = "SIM"; // Texto de condição para envio
  const textoENVIADO = "ENVIADO"; // Texto de status "enviado"

  // Função para extrair o ID do link do Google Drive
  function pegalink(link) {
    const match = link.match(/\/d\/([a-zA-Z0-9-_]+)/);
    if (match) {
      return match[1];
    }
    return null;
  }

  // Obtém a planilha ativa
  const planilha = SpreadsheetApp.getActiveSpreadsheet();
  const aba1 = planilha.getSheetByName(TABELA);

  // Obtém um intervalo de dados na planilha
  const intervalo = aba1.getRange(linhaINICIAL, 1, aba1.getLastRow() - linhaINICIAL + 1, colunaSTATUS);
  const dados = intervalo.getValues();

  // Loop pelos dados na planilha
  for (let i = 0; i < dados.length; ++i) {
    if (dados[i][colunaENVIO - 1] === textoCONDICAO && dados[i][colunaSTATUS - 1] !== textoENVIADO) {
      // Extrai informações da linha de dados
      const email = dados[i][0];
      const cc1 = dados[i][4];
      const cc2 = dados[i][5];
      const assun = dados[i][7];
      const titulo = dados[i][6];
      const anexoLink = dados[i][8];

      // Monta informações para o email
      let copiaoculta;

      if (cc1 != '') {
        copiaoculta = cc1
      }

      if (cc2 != '') {
        copiaoculta = `${cc1}, ${cc2}`
      }

      const fileId = pegalink(anexoLink);
      const subject = `Faturamento ${titulo}`;
      const message = `
          <font size='3' face='Comfortaa'> Olá, tudo bem? </font><br>
          <font size='3' face='Comfortaa'>${assun}</font><br>
          <font size='3' face='Comfortaa'> Atenciosamente Time de Backoffice Comercial.</font><br><br>`;

      let emailEnviado = false;

      // Verifica se deve ser enviada uma cópia oculta e se há um arquivo anexado
      if (!copiaoculta) {
        if (fileId) {
          const pdfFile = DriveApp.getFileById(fileId);
          // Envia o email sem cópia oculta e com um anexo
          MailApp.sendEmail(email, subject, message, {
            htmlBody: message,
            name: 'Google Community',
            attachments: [pdfFile.getAs(MimeType.PDF)],
            noReply: true,
          });
        } else {
          // Envia o email sem cópia oculta e sem anexo
          MailApp.sendEmail(email, subject, message, {
            htmlBody: message,
            name: 'Google Community',
            noReply: true,
          });
        }
        emailEnviado = true;
      } else {
        if (fileId) {
          const pdfFile = DriveApp.getFileById(fileId);
          // Envia o email com cópia oculta e com um anexo
          console.log(copiaoculta)
          MailApp.sendEmail(email, subject, message, {
            htmlBody: message,
            bcc: copiaoculta,
            name: 'Google Community',
            attachments: [pdfFile.getAs(MimeType.PDF)],
            noReply: true,
          });
        } else {
          // Envia o email com cópia oculta e sem anexo
          MailApp.sendEmail(email, subject, message, {
            htmlBody: message,
            bcc: copiaoculta,
            name: 'Google Community',
            noReply: true,
          });
        }
        emailEnviado = true;
      }

      // Atualiza o status na planilha e encerra o código após o envio de um email
      if (emailEnviado) {
        aba1.getRange(linhaINICIAL + i, colunaSTATUS).setValue(textoENVIADO);
        SpreadsheetApp.flush();
        return;
      }
    }
  }
}



Qualquer coisa volte a perguntar.
 
 
*Todos os Experts são voluntários que dispõem do seu tempo pessoal para contribuir na comunidade.
 
G®Δ√ΣŦØ
Google Products Expert

Michel Hazuky (Expert em Produtos Diamante (EP Diamante)) recomendou isto
Elogio enviado por Karina Monteiro 321:
Preciso
26 de out. de 2023
deu certo muito obrigada 
false
6802518319089775086
true
Pesquisar na Central de Ajuda
true
true
true
true
true
35
Pesquisa
Limpar pesquisa
Fechar pesquisa
Menu principal
false