Salvar anexos do Outlook 2007 usando C#

by Agnaldo 19. março 2010 11:38

Podem baixar o aplicativo completo em SalvaAnexosOutlook2007.exe (93,50 kb). Não precisa instalar. Copie para uma pasta qualquer que já funciona. Só uma coisa: ele remove todos os anexos dos e-mails.

Em caso de dúvidas, podem me mandar uma mensagem, usando o link existente no programinha.

E, se quiser ver o código, é esse (não se esqueça de adicionar a referência para o Microsoft.Office.Interop.Outlook):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using 
System.Data;
using 
System.Drawing;
using 
System.Linq;
using 
System.Text;

using 
SWF System.Windows.Forms;
using 
Microsoft.Office.Interop.Outlook;
using 
System.Text.RegularExpressions;

namespace 
SalvaAnexosOutlook2007
{
    
public partial class Form1 : SWF.Form
    {
        
public Form1()
        {
            InitializeComponent()
;
        
}

        
private void Form1_Load(object sender, EventArgs e)
        {
            Application myApp 
= new ApplicationClass();

            foreach 
(Folder f in myApp.GetNamespace("MAPI").Folders)
                listBox1.Items.Add(f.Name)
;
            listBox1.SelectedIndex 0;
        
}
        
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
if (listBox1.SelectedIndex !-1)
            {
               listBox2.Items.Clear()
;

                
Application myApp = new ApplicationClass();

                foreach 
(Folder f in myApp.GetNamespace("MAPI")
                    .Folders[listBox1.SelectedIndex + 
1].Folders)
                    listBox2.Items.Add(f.Name)
;
            }
        }

        
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            
if (SWF.MessageBox.Show(
                
"Tem certeza que quer salvar os anexos das mensagens selecionadas?" +
                
"\n\nIsso apagará os anexos do seu e-mail!!!""Responda",
                SWF.MessageBoxButtons.YesNo,
                SWF.MessageBoxIcon.Question)
                    
== SWF.DialogResult.Yes)
            {
                Application myApp 
= new ApplicationClass();

                foreach 
(Folder f in myApp.GetNamespace("MAPI")
                    .Folders[listBox1.SelectedIndex + 
1].Folders)
                {
                    
if (f.Name.Equals(listBox2.SelectedItem.ToString()))
                    {
                        
foreach (object email in (f.Items))
                        {
                            MailItem mail 
email as MailItem;

                           int 
contador;

                            if 
(mail != null)
                            {
                                contador 
0;

                                while 
(mail.Attachments.Count > && contador <10)
                                {
                                    Attachment mi 
mail.Attachments[1as Attachment;
                                    if 
(mi != null)
                                    {
                                        string nomeAtt = null;

                                        try
                                        
{
                                            nomeAtt 
SWF.Application.StartupPath
                                                + 
@"\" + f.Name
                                                + 
"_" + mail.SentOn.ToString("yyyyMMddHHmmss")
                                                + 
"_" + Limpar(mail.Subject)
                                                + 
"_" + Limpar(mi.DisplayName);
                                            
mi.SaveAsFile(nomeAtt);

                                            
label1.Text mi.DisplayName;
                                            
SWF.Application.DoEvents();

                                            
mi.Delete();
                                        
}
                                        
catch
                                        
{
                                            contador++
;
                                        
}
                                    }
                                }

                                
if (mail != null)
                                    mail.Save()
;
                            
}
                        }
                        
if (SWF.MessageBox.Show(
                            
"Arquivos gravados - quer abrir a pasta?",
                            
"FIM DO PROCESSO",
                            SWF.MessageBoxButtons.YesNo,
                            SWF.MessageBoxIcon.Question)
                                
== SWF.DialogResult.Yes)
                        {
                            System.Diagnostics.Process.Start(
                                SWF.Application.StartupPath)
;
                            
SWF.Application.Exit();
                        
}
                    }
                }
            }
        }

       
private String Limpar(String s)
        {
            
return Regex.Replace(s, "[\"@/{}<>():|;\\?*&%$]", String.Empty);
        
}
        
private void linkLabel1_LinkClicked(object sender, SWF.LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start(
http://www.50minutos.com.br/FaleConosco.aspx);
        
}
    }
}

 

Comentários

22/3/2010 08:38:04 #

Ademir

Boa Agnaldo, isto eh bom pra quem esta desenvolvendo nota fical eletronica... que precisa monitorar uma conta pra pegar o xml da nfe de entrada que os fornecedores enviam  vlw...

Ademir Brazil | Reply

22/3/2010 09:19:50 #

agnaldo

opa... mais uma idéia/utilização!!! fico feliz!!!

agnaldo | Reply

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Agnaldo

foto

Possui mais de 25 anos de experiência na área, tendo sido aprovado em mais de 25 certificações (Microsoft e Sun), recebendo as credenciais MCT, diversos MCTS e MCITP, MCPD, MCSE, MCDBA, MCSD, MCP e SCJP. Formado em Tecnologia em Processamento de Dados pela Fatec, foi desenvolvedor, analista e gerente de projetos. Atualmente faz o que gosta: é instrutor no centro de treinamentos 50minutos.