Tutorial C# – Enviar e-mail a partir de uma Windows Forms
Este tutorial serve para demonstrar como se pode enviar um e-mail utilizando uma Windows Form em C#. Será um formulário muito simples, mas com possibilidade de se tornar extremamente completo. Como já anteriormente se tinha sucedido com o tutorial ”como imprimir o conteúdo de uma datagridview”, este tutorial surgiu da necessidade de criar algo simples, mas que acima de tudo, funcione!
Após várias horas de pesquisa, muitos sites vistos, algumas dezenas de exemplos complicados ou que nem sequer funcionavam, e quase sem esperança de encontrar uma ajuda na Internet, juntei vários exemplos e no fim tinha o que eu queria.
Mãos à obra.
Primeiro criamos um novo projecto, e definimos os campos que queremos que sejam utilizados. Neste caso usei cinco campos: Para; CC; Anexo; Assunto; Mensagem.
Agora vamos ao código.
Primeira parte do Código:
Apesar de não ser totalmente necessário, criei um método void para o envio do e-mail.
Neste início de código podem facilmente identificar o modo de como inserir os campos e associar a uma TextBox ou a um email previamente definido.
É importante realçar que foi utilizado o namespace System.Net.Mail.
Sem este namespace seria impossível utilizar ou chamar as funcionalidades referentes ao email. Normalmente estes namespace são utilizados logo no início, juntamento com os:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; |
Mas neste caso utilizei directamento no código.
Segunda parte do Código:
Terceira parte do Código:
Nesta terceira parte do código entramos na área mais técnica.
Para terminar, vamos adicionar código ao botão que irá anexar algo.
Antes de adicionar o código, é necessário adicionar o openFileDialog, que nos permitirá seleccionar o ficheiro a anexar.
Para isso basta “arrastar” o openFileDialog da Toolbox para a “Form”.
Quarta parte do Código:
Esta última parte do código serve para adicionar o método SendEmail() no botão que enviará o e-mail, e também inserir o código no botão que irá anexar algum ficheiro.
No botão que servirá para anexar um ficheiro o código será:
No botão que enviará o e-mail, o código será:
E assim acabamos o Código.
Exemplo:
E aqui está o resultado do envio:
Como em tudo na vida, é possível personalizar ao máximo estes envios, como também fazer validações (por exemplo caso o campo CC não esteja preenchido. Mas isso já depende dos gostos pessoais.
Espero que tenham gostado.
Este artigo tem mais de um ano
Excelente. Era mesmo disto que eu andava à procura. Simples e eficaz. Não imaginas as horas que andei na internet a pesquisar isto.
PS: Ainda bem que voltaram os tutorial de C#.
FÁCIL E PRÁTICO
Muito bom!
Muito nice… estes tutorials são porreiros, continua!
Era Porreiro o “Copy Paste” lol
Quer o Download do código é isso?
Se for, coloco daqui a pouco online 🙂
Cumps
Sim, se puderes colocar o código era óptimo.
Obrigado
Já agora queria saber se é possível criar um tutorial de aplicação simples que escreva numa BD mysql 🙂
Será o próximo tutorial.
🙂
Cumps
Sim, em vez das imagens o “Código” era mais interessante….
Mas tanto trabalho para mim, não é preciso 🙂
ola, esda dando um pequeno erro na seguinte linha:
smtp.Send(message);
o erro é : SmtpException was unhandled
Failure sending mail.
olá! estudei os teus códigos, e achei-os muito fácil para pôr em prática, e já consegui conceber a aplicação, só que encontrei dificuldade ao enviar, está resultar de um erro que não estou a dar conta a que se deve o mesmo.
Amigos, não sejam calões, escrevam código que só assim é que ganham prática. Copy Paste para quê? Escrevam… usem o Notepad++. Se vos disser que as classes que escrevo em java no Notepad(++) compilam à primeira… 🙂
O Notepad é nosso amigo.
Se ganhares a vida a programar, e se a produtividade é um factor para ganhares mais ou menos dinheiro, isso que acabaste de dizer … enfim 🙂
Coitados dos “programadores” que precisam de copiar código de um simples processo de envio de emails.
Reutilizar é (muito) diferente de copiar.
Grande Artigo 🙂 Parabéns e continua
Peço desculpa por ser nabo! 🙂 Mas tirando a utilidade académica, em termos práticos isto tem mais algum interesse? Uso o web gmail, teria alguma vantagem com o uso disto?
abraço
Isto tem sobretudo utilidade para programadores em C# e que querem integrar numa aplicação um form de email. Não serve de maneira nenhuma para “substituir” um outlook ou um gmail 🙂
Cumps
Ahh… Obrigado! 🙂
Exacto, eu no BatteryCare tenho já implementado um sistema de relato de erros que permite o envio de um email, por parte do utilizador, com o log do erro em anexo para mim, para efeitos de debugging.
Eu não diria melhor.
PS: Já agora, a tua aplicação é fantástica. É óbvio que está instalada no meu portátil. 🙂
Cumps
Boas ,eu na verdade uso algo semelhante para fazer o backup de código gerado por uma aplicação minha, o objectivo é se um problema acontecer, no mail vai estar sempre uma versão anterior.
antes disso, usei para relato de erros, mas ultimamente desactivei essa funcionalidade.
Sr Hélio, e como adicionamos a imagem (neste caso a do pplware)?
Abraço.
Basta clicar no botão “procurar” que está no “anexo”, e indicar o caminho de onde se encontra a imagem 😉
Cumps
Obrigado pela resposta, já agora qual é o compilador que você usa?
Cumprimentos.
Peço desculpa pelo offtopic!
Mas precisava de uma dica, preciso de um programa de sincronização, ou seja, que grave os meus ficheiros noutro lado quando é alterado…por exemplo um doc do word, eu faço gravar no C:\ e fica gravado também no D:\ !
Alguém Conhece?
🙂
Como isto é um post de programação indico-te onde podes tirar ideias. Se perceberes de programação basta alterar o código deste tutorial aqui do pplware
https://pplware.sapo.pt/tutoriais/tutorial-c-peopleware-monitor/
E fazeres com que copie o ficheiro para a pasta que pretendes.
PS: Quando voltam os de ASP.NET?
Obrigado!
🙂
Sem dúvida um excelente artigo 🙂
Parabens pelo artigo
Boas 😀
Parabéns pela iniciativa, eu comecei há pouco tempo a programar C#, mas tenho tido alguns problemas em ligar aquilo a uma base de dados, e trabalhar com ela, será que podiam fazer um tutorialzinho disso?
Cumprimentos
Que tipo de Ligação preferes? SQL, Access? Para a semana vou colocar um tutorial online sobre ligação C# + MySQL.
Cumps
Somos 2… Eu tb comecei a pouco tempo a mexer em C#… se conseguisse escrever em bds Mysql, era meio caminho andado para as minhas coisas… o resto faço, com mais ou menos cabeçadas.. lol
Talvez Off topic.
Boas,
Gostaria de saber a vossa opinião em relação ao seguinte:
Consideram que fale a pena apostar na minha formação nesta linguagem de programação?
Queria aprender a programar, acham que este é um bom patamar de partida?
Obrigado.
“Queria aprender a programar, acham que este é um bom patamar de partida?”
Meu amigo…
Não existe melhor para começar, .NET e principalmente c# vai-te dar um leque grandioso de opções no mercado de trabalho. É “simples” mas muito robusto e muito prático.
Ao longo da tua vida/carreira vais ver que não podes nem te irás deparar só com uma linguagem, o truque, tens de ser bom programador( lógica, Abstracção, OOP ) depois qualquer linguagem te vai parecer igual.
Cumprimentos
PS: depois tens de ver onde te inseres, se Web ou Cliente, se somente Windows ou todos os sistemas.
Amigo, se nunca programaste… começa com a linguagem que mais pessoas usam e ensinam nas escolas ao começar a programar: Linguagem C
As melhores linguagens de programação para se aprender a programar são as funcionais. O Haskell é um grande ponto de partida.
Se não for do agrado, o C é sempre um bom começo.
Se pudesses fazer um sobre C# e base de dados (Microsoft Office Access 2007), adicionar, remover, ordenar, procurar dados, era de valor amigo!
Agradeço desde já este tutorial. Cumprimentos!
Teria como disponibilizar para Downlaod ?
Estou com alguns problemas para poder conseguir desenvolver.
Obrigado
Boas, não sei se deve postar aqui ou não, eu tenho de fazer uma aplicação movel, exactamente com este conceito de enviar email pela aplicação movel…será que me podem ajudar, ja pesquisei e não encontrei nada. Obrigado
Poderia disponibilizar o codigo? obrigado
E teria como mandar para uma lista de pessoas?
Qual seria o código para eu carregar essa lista de email de um arquivo txt?
Obrigado
nao da para por o codigo, nao consigo por a funcionar
Eu utilizei esse código para a minha aplicação, funciona perfeitamente, mas quando utilizo o software em rede ele não funciona, apenas no pc em que tenho o c# e desenvolvi o software.
Alguém sabe o que pode estar mal ?
Muito Bom!
Foi de grande ajuda.
Parabens Cara era exatamente o que eu queria
Boas
Já fiz a aplicação no entanto diz que manda o email mas nao recebo nada ….
Alguém me pode ajudar?
Boa tarde , estou a trabalhar em c# so que em vez de windows forms estou a trabalhar em Wpfapllication que é destinado a pda , todo o código funciona com um pequeno problema o anexo porque eu não tenho o botão openFileDialog então não consigo por o anexo a funcionar , ha algum botão que substituía este ? o que devo fazer ?
Obrigado desde já , excelente trabalho muito bem explicito , parabéns
Brilhante artigo!
Agradeço imenso o trabalho.
Caramba, funcionou.
Parabéns cara, é simples e prático.
Muito obrigado!!!!!
Boas
Podias era por o downlowd do programa e do codigo sff se possivel xD
Poor Favooor’ *-*
está dando erro aqui =\ ‘noob’ eu
Valew
Esse foi fácil de implementar.
Tem como consultar a caixa de entrada de um e-mail via Código C# utilizando uma aplicação Windows Forms?
Obrigado. Fácil implementar. Parabéns pela explicação.
Alguem sabe me falar como fazer pra enviar o email sem que obrigatoriamente se anexe algo?
É só colocar a linha abaixo:
if (!String.IsNullOrEmpty(txtAnexos.Text))
{
System.Net.Mail.Attachment anexo = new System.Net.Mail.Attachment(txtAnexos.Text);
message.Attachments.Add(anexo);
}
Ola a todos
eu estou com um probleminha aqui como não tenho domínio para colocar
tentei colocar o do Gmail só que esta dando erro nessa linha
code:
smtp.Send(message);
ha
mais uma coisas nas Credentials devemos colocar o que no “oMeuUserName” e que senha
code:
smtp.Credentials = new System.Net.NetworkCredential(“oMeuUsername”, “Password”);
aqui amigos tem o Download do código http://www.4shared.com/rar/d8F2-puT/E-mailNet.html
Perfeito! De todos os que vi, esse é o melhor.
Mas estou com dois problemas:
1) Toda vez que tento colocar mais de um e-mail separando por “;” me apresenta a seguinte mensagem de erro: A seqüência de caracteres especificada não está no formato necessário para um endereço de email.
2) Não consegui criar uma forma de não enviar algum arquivo anexo. Toda vez que tendo apresenta essa mensagem: O parâmetro ‘fileName’ não pode ser uma seqüência de caracteres vazia.
Nome do parâmetro: fileName
voce deve criar uma função para tratar os dados desse textbox separado, por exemplo quando for digitado ; voce deve fazer uma nova chamada de envio e pegar sempre o email depois do ;
Oi Silvestre!
Sou iniciante e não saberia desenvolver essa função. Você tem pronta!
Aonde eu posso baixar o codigo fonte? eu posso utilizar essa maneira para um envio de email de cobrança?
Olá Guilherme Walter,
Nestes tutoriais mais antigos não é possível efectuar o download do código fonte.
Contudo, se fizer tal como está explicado funcionará perfeitamente.
Sim, pode utilizar este método para qualquer tipo de envio de emails.
Cumps,
Hélio Moreira
Eu fiz todo o procedimento, que o tutorial explica, porém não tive êxito.
Aparece a seguinte mensagem, para o campos: Para, CC, Assunto e mensagem:
“The name ‘TbPara’ does not exist in the current context”
Defini variável e tirei o “.Text”, mas mesmo assim não consegui. Além deste erro a sintaxe: “txtAttachmentPath.Text”, também não é reconhecida.
Pode(m) me falar onde estou errando?
Grato,
Mauricio Dias de Jesus.
adorei era o que eu preocurava durante duas semanas
olá! primeiro tenho de te parabenizar por este feito,
fiz a aplicação conforme a descrição dos códigos acima mencionados, aplicação está funcionar e já autentetiquei, só que está apresentar
um erro que não estou entender ao que se deve o mesmo.
gostaria que me ajudasse.
Olá Mario, antes de mais obrigado pelo teu comentário. Pode dizer qual é o erro? De preferires podes enviar email para helio.moreira[at]pplware.com
Abraço
Qual é a ordem dos códigos, onde eu coloco a grande parte do código? Da primeira parte até a terceira do código não sei onde colocar.
Não consigo enviar o email da um erro na linha do código
smtp.send(message);
o que eu faço?
Estou com o mesmo erro na linha smtp.send(message);
An unhandled exception of type ‘System.Net.Mail.SmtpException’ occurred in System.dll
creio que seja a Exception que foi comentado no código que poderia acontecer, mas como se resolve isso?
consegui resolver, o problema é que estava faltando uma porta, colocando a seguinte linha resolve o problema
smtp.Port = 587;
Obs.: coloquei essa linha de código logo acima do
smtp.Credentials
Caro @Matheus,
Pode indicar qual o erro que está a dar?
Cumps,
Hélio Moreira
Hélio! Parabéns pelo tutorial.
Seu código é espetacular, muito simples e útil.
Porém gostaria que você colocasse um código para colocar a assinatura automaticamente. Tentei achar com smtp ponto e não veio na janela uma opção adequada.
Outro coisa é preciso incluir uma validação do e-mail do destinatário. Eu tenho o código, mas não sei onde implementar.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Proteçãodados
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
}
private void Form2_Load(object sender, EventArgs e)
{
}
public void SendEmail()
{
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.To.Add(tbPara.Text);
message.CC.Add(tbCC.Text);
System.Net.Mail.Attachment anexo = new System.Net.Mail.Attachment (txtAttachmentPath.Text);
message.Attachments.Add(anexo);
message.Subject = tbAssunto.Text;
message.From = new System.Net.Mail.MailAddress(“leoboss619@gmail.com”);
message.Body = tbMensagem.Text;
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
smtp.Host = “smtp.gmail.com”;
smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential(“leoboss619@gmail.com”, “leo99leo99”);
smtp.Send(message);
MessageBox.Show(“Email enviado com sucesso!”, “Informação”, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void btEmail_Click(object sender, EventArgs e)
{
//Aqui chamei a funnção SendEmail
SendEmail();
}
private void anexo_Click(object sender, EventArgs e)
{
//Aqui chamaei a função para podermos adicionar um anexo
openFileDialog1.ShowDialog();
txtAttachmentPath.Text = openFileDialog1.FileName;
}
private void button1_Click(object sender, EventArgs e)
{
//Fecha a aplicação
Application.Exit();
}
}
}
Alguém consegue me ajudar ? segui os passos acima referidos.
Leonardo, que erro está a dar?
Será que me pode ajudar
Faço todo o processo mas quando carrego no botão para enviar o e-mail ele não faz nada e dá erro na linha de código:
smtp.Send(message);
o mesmo
System.Net.Mail.SmtpException (falha ao enviar o email)
em smtp.Send(message);