none
Email SMTP en VC++ RRS feed

  • Pregunta

  • Hola:

    Hace un rato me funcionó en C# el envío de un mensaje por correo electrónico. Luego en un momento lo adapté a VB .net gracias a esta Web y me funiona muy bien. Ahora quiero probarlo para Visual C++ y no entiendo ni papa. Parece ser que hay que usar mucho los -> y :: que son los . en C#.

    ¿Me hechan una mano la adpatación?
    Así con el tiempo me familiarizo con el lenguaje. C++ parece muy engorroso comparado con C# y VB .net.

    Códigos en C# es el siguiente:

    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;
    
    using System.Net;  // No olvidar.
    using System.Net.Mail;
    
    namespace email
    {
     public partial class Form1 : Form
     {
      public Form1()
      {
       InitializeComponent();
      }
    
      private void button_enviar_Click(object sender, EventArgs e)
      {
       toolStripStatusLabel1.Text = " ";
       button_enviar.Enabled = false;
       //La cadena "servidor" es el servidor de correo que enviará tu mensaje.
       string servidor = textBox_smtp.Text;
       // Crea el mensaje estableciendo quién lo manda y quién lo recibe.
       MailMessage mensaje = new MailMessage(
        textBox_emisor.Text,
        textBox_receptor.Text,
        textBox_asunto.Text,
        richTextBox_mensajazo.Text);
    
       try
       {
        // Envía archivo adjunto.
        Attachment archivo_adjunto = new Attachment(textBox_ruta_buscar_archivo.Text);
        mensaje.Attachments.Add(archivo_adjunto);
       }
    
       catch (ArgumentException)
       {
        // Sin asunto.
       }
    
    
       //Envía el mensaje.
       SmtpClient cliente = new SmtpClient(servidor);
    
       cliente.UseDefaultCredentials = false;
       cliente.Credentials = new System.Net.NetworkCredential(textBox_emisor.Text, textBox_contra.Text);
       cliente.Port = Convert.ToInt32(textBox_puerto.Text);
       cliente.Host = textBox_smtp.Text;
       cliente.EnableSsl = true;
    
       //Añade credenciales si el servidor lo requiere.
       //cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
       try
       {
        cliente.Send(mensaje);
       }
       catch (SmtpException)
       {
        MessageBox.Show("No haz introducido bien la contraseña. \nNo admite ciertos archivos que puedan contener virus como .exe, etc.\nEl archivo es demasiado grande.", "Aviso:", 
         MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
       }
       toolStripStatusLabel1.Text = "Enviado.";
       button_enviar.Enabled = true;
      }
    
      private void button_buscar_adjunto_Click(object sender, EventArgs e)
      {
       if (openFileDialog1.ShowDialog() == DialogResult.OK)
       {
        textBox_ruta_buscar_archivo.Text = openFileDialog1.FileName.ToString();
       }
      }
     }
    }
    
    

     

     

     

     

     

    Código hecho en VB .net 2010:

    Imports System.Net ' No olvidar.
    Imports System.Net.Mail
    
    Public Class Form1
    
     Private Sub button_enviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button_enviar.Click
      toolStripStatusLabel1.Text = " "
      button_enviar.Enabled = False
      'La cadena "servidor" es el servidor de correo que enviará tu mensaje.
      Dim servidor As String = textBox_smtp.Text
      ' Crea el mensaje estableciendo quién lo manda y quién lo recibe.
      Dim mensaje As New MailMessage(textBox_emisor.Text, textBox_receptor.Text, textBox_asunto.Text, richTextBox_mensajazo.Text)
    
      Try
       ' Envía archivo adjunto.
       Dim archivo_adjunto As New Attachment(textBox_ruta_buscar_archivo.Text)
       mensaje.Attachments.Add(archivo_adjunto)
    
       ' Sin asunto.
      Catch generatedExceptionName As ArgumentException
      End Try
    
    
      'Envía el mensaje.
      Dim cliente As New SmtpClient(servidor)
    
      cliente.UseDefaultCredentials = False
      cliente.Credentials = New System.Net.NetworkCredential(textBox_emisor.Text, textBox_contra.Text)
      cliente.Port = Convert.ToInt32(textBox_puerto.Text)
      cliente.Host = textBox_smtp.Text
      cliente.EnableSsl = True
    
      'Añade credenciales si el servidor lo requiere.
      'cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
      Try
       cliente.Send(mensaje)
      Catch generatedExceptionName As SmtpException
       MessageBox.Show("No haz introducido bien la contraseña. " & vbLf & "No admite ciertos archivos que puedan contener virus como .exe, etc." & vbLf & "El archivo es demasiado grande.", "Aviso:", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
      End Try
      toolStripStatusLabel1.Text = "Enviado."
      button_enviar.Enabled = True
    
     End Sub
    
     Private Sub button_buscar_adjunto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button_buscar_adjunto.Click
      If openFileDialog1.ShowDialog() = DialogResult.OK Then
       textBox_ruta_buscar_archivo.Text = openFileDialog1.FileName.ToString()
      End If
     End Sub
    End Class
    
    

     

    Saludo.


    http://electronica-pic.blogspot.com

     

     

     

     

    Edito:

    El primer código del botón enviar lo he intentado y me da errores por todas partes.

    private: System::Void button_enviar_Click(System::Object^ sender, System::EventArgs^ e) {
    
    			toolStripStatusLabel1->Text = " ";
          button_enviar->Enabled = false;
          //La cadena "servidor" es el servidor de correo que enviará tu mensaje.
          string servidor = textBox_smtp->Text;
          // Crea el mensaje estableciendo quién lo manda y quién lo recibe.
          MailMessage mensaje = new MailMessage(
            textBox_emisor->Text,
            textBox_receptor->Text,
            textBox_asunto->Text,
            richTextBox_mensajazo->Text);
    
          try
          {
            // Envía archivo adjunto.
            Attachment archivo_adjunto = new Attachment(textBox_ruta_buscar_archivo::Text);
            mensaje::Attachments::Add(archivo_adjunto);
          }
    
          catch (ArgumentException)
          {
            // Sin asunto.
          }
    
    
          //Envía el mensaje.
          SmtpClient cliente = new SmtpClient(servidor);
    
          cliente::UseDefaultCredentials = false;
          cliente::Credentials = new System.Net.NetworkCredential(textBox_emisor::Text, textBox_contra::Text);
          cliente::Port = Convert.ToInt32(textBox_puerto::Text);
          cliente::Host = textBox_smtp::Text;
          cliente::EnableSsl = true;
    
          //Añade credenciales si el servidor lo requiere.
          //cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
          try
          {
            cliente::Send(mensaje);
          }
          catch (SmtpException)
          {
            MessageBox::Show("No haz introducido bien la contraseña. \nNo admite ciertos archivos que puedan contener virus como .exe, etc.\nEl archivo es demasiado grande.", "Aviso:", 
              MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
          }
          toolStripStatusLabel1::Text = "Enviado.";
          button_enviar::Enabled = true;
    
    			 }

    miércoles, 27 de abril de 2011 5:27

Respuestas

  • No soy súper experto en C++/CLI, pero aquí van un par de comentarios que espero te sirvan. 

    1.- Cuando instancies objetos administrados, usa gcnew. Recuerda los punteros administrados también. Por ejemplo: 

    MailMessage^ mensaje = gcnew MailMessage(...);
    

    2.- Usa el operador de resolución :: para llamar métodos estáticos, y -> para los no estáticos, cuando trates con objetos administrados. Por ejemplo, MessageBox::Show es correcto porque Show es método estático; pero cliente::Send es inválido porque Send no lo es: en su lugar, deberías poner cliente->Send(mensaje). 

    Finalmente, recomendarte este excelente artículo introductorio de Nishant Sivakumar, para aclarar conceptos e ideas que tengas. 

    Saludos. 



    Fernando Gómez
    fermasmas.wordpress.com
    • Marcado como respuesta Metaconta lunes, 2 de mayo de 2011 14:31
    miércoles, 27 de abril de 2011 23:45
  • Ya me salió.

    #pragma once
    
    namespace email_smtp_cpp {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	using namespace System::Net; // No olvidar.
    	using namespace System::Net::Mail;
    
    
    	// http://social.msdn.microsoft.com/Forums/es-ES/vcppdotnetes/thread/fcf49d6d-89ff-43de-a4ad-1245ed06f885#2573322c-7082-4c58-be97-f46080a8c45d
    
    	/// <summary>
    	/// Resumen de Form1
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: agregar código de constructor aquí
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Limpiar los recursos que se estén utilizando.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Label^ label_puerto;
    	protected: 
    	private: System::Windows::Forms::Label^ label_smtp;
    	private: System::Windows::Forms::TextBox^ textBox_puerto;
    	private: System::Windows::Forms::TextBox^ textBox_smtp;
    	private: System::Windows::Forms::Label^ label_buscar_adjunto;
    	private: System::Windows::Forms::Button^ button_buscar_adjunto;
    	private: System::Windows::Forms::TextBox^ textBox_ruta_buscar_archivo;
    	private: System::Windows::Forms::Label^ label_contraseña;
    	private: System::Windows::Forms::StatusStrip^ statusStrip1;
    	private: System::Windows::Forms::ToolStripStatusLabel^ toolStripStatusLabel1;
    	private: System::Windows::Forms::TextBox^ textBox_contra;
    	private: System::Windows::Forms::Label^ label_mensaje;
    	private: System::Windows::Forms::Label^ label_asunto;
    	private: System::Windows::Forms::Label^ label_receptor;
    	private: System::Windows::Forms::Label^ label_enviar;
    	private: System::Windows::Forms::RichTextBox^ richTextBox_mensajazo;
    	private: System::Windows::Forms::TextBox^ textBox_asunto;
    	private: System::Windows::Forms::TextBox^ textBox_receptor;
    	private: System::Windows::Forms::TextBox^ textBox_emisor;
    	private: System::Windows::Forms::Button^ button_enviar;
    	private: System::Windows::Forms::OpenFileDialog^ openFileDialog1;
    
    	private:
    		/// <summary>
    		/// Variable del diseñador requerida.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Método necesario para admitir el Diseñador. No se puede modificar
    		/// el contenido del método con el editor de código.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->label_puerto = (gcnew System::Windows::Forms::Label());
    			this->label_smtp = (gcnew System::Windows::Forms::Label());
    			this->textBox_puerto = (gcnew System::Windows::Forms::TextBox());
    			this->textBox_smtp = (gcnew System::Windows::Forms::TextBox());
    			this->label_buscar_adjunto = (gcnew System::Windows::Forms::Label());
    			this->button_buscar_adjunto = (gcnew System::Windows::Forms::Button());
    			this->textBox_ruta_buscar_archivo = (gcnew System::Windows::Forms::TextBox());
    			this->label_contraseña = (gcnew System::Windows::Forms::Label());
    			this->statusStrip1 = (gcnew System::Windows::Forms::StatusStrip());
    			this->toolStripStatusLabel1 = (gcnew System::Windows::Forms::ToolStripStatusLabel());
    			this->textBox_contra = (gcnew System::Windows::Forms::TextBox());
    			this->label_mensaje = (gcnew System::Windows::Forms::Label());
    			this->label_asunto = (gcnew System::Windows::Forms::Label());
    			this->label_receptor = (gcnew System::Windows::Forms::Label());
    			this->label_enviar = (gcnew System::Windows::Forms::Label());
    			this->richTextBox_mensajazo = (gcnew System::Windows::Forms::RichTextBox());
    			this->textBox_asunto = (gcnew System::Windows::Forms::TextBox());
    			this->textBox_receptor = (gcnew System::Windows::Forms::TextBox());
    			this->textBox_emisor = (gcnew System::Windows::Forms::TextBox());
    			this->button_enviar = (gcnew System::Windows::Forms::Button());
    			this->openFileDialog1 = (gcnew System::Windows::Forms::OpenFileDialog());
    			this->statusStrip1->SuspendLayout();
    			this->SuspendLayout();
    			// 
    			// label_puerto
    			// 
    			this->label_puerto->AutoSize = true;
    			this->label_puerto->Location = System::Drawing::Point(459, 72);
    			this->label_puerto->Name = L"label_puerto";
    			this->label_puerto->Size = System::Drawing::Size(41, 13);
    			this->label_puerto->TabIndex = 37;
    			this->label_puerto->Text = L"Puerto:";
    			// 
    			// label_smtp
    			// 
    			this->label_smtp->AutoSize = true;
    			this->label_smtp->Location = System::Drawing::Point(353, 72);
    			this->label_smtp->Name = L"label_smtp";
    			this->label_smtp->Size = System::Drawing::Size(82, 13);
    			this->label_smtp->TabIndex = 36;
    			this->label_smtp->Text = L"Servidor SMTP:";
    			// 
    			// textBox_puerto
    			// 
    			this->textBox_puerto->Location = System::Drawing::Point(462, 88);
    			this->textBox_puerto->Name = L"textBox_puerto";
    			this->textBox_puerto->Size = System::Drawing::Size(100, 20);
    			this->textBox_puerto->TabIndex = 35;
    			this->textBox_puerto->Text = L"587";
    			// 
    			// textBox_smtp
    			// 
    			this->textBox_smtp->Location = System::Drawing::Point(356, 88);
    			this->textBox_smtp->Name = L"textBox_smtp";
    			this->textBox_smtp->Size = System::Drawing::Size(100, 20);
    			this->textBox_smtp->TabIndex = 34;
    			this->textBox_smtp->Text = L"smtp.gmail.com";
    			// 
    			// label_buscar_adjunto
    			// 
    			this->label_buscar_adjunto->AutoSize = true;
    			this->label_buscar_adjunto->Location = System::Drawing::Point(189, 172);
    			this->label_buscar_adjunto->Name = L"label_buscar_adjunto";
    			this->label_buscar_adjunto->Size = System::Drawing::Size(84, 13);
    			this->label_buscar_adjunto->TabIndex = 33;
    			this->label_buscar_adjunto->Text = L"Archivo adjunto:";
    			// 
    			// button_buscar_adjunto
    			// 
    			this->button_buscar_adjunto->Location = System::Drawing::Point(523, 185);
    			this->button_buscar_adjunto->Name = L"button_buscar_adjunto";
    			this->button_buscar_adjunto->Size = System::Drawing::Size(75, 23);
    			this->button_buscar_adjunto->TabIndex = 32;
    			this->button_buscar_adjunto->Text = L"Buscar";
    			this->button_buscar_adjunto->UseVisualStyleBackColor = true;
    			this->button_buscar_adjunto->Click += gcnew System::EventHandler(this, &Form1::button_buscar_adjunto_Click);
    			// 
    			// textBox_ruta_buscar_archivo
    			// 
    			this->textBox_ruta_buscar_archivo->Location = System::Drawing::Point(192, 188);
    			this->textBox_ruta_buscar_archivo->Name = L"textBox_ruta_buscar_archivo";
    			this->textBox_ruta_buscar_archivo->Size = System::Drawing::Size(325, 20);
    			this->textBox_ruta_buscar_archivo->TabIndex = 31;
    			// 
    			// label_contraseña
    			// 
    			this->label_contraseña->AutoSize = true;
    			this->label_contraseña->Location = System::Drawing::Point(247, 72);
    			this->label_contraseña->Name = L"label_contraseña";
    			this->label_contraseña->Size = System::Drawing::Size(64, 13);
    			this->label_contraseña->TabIndex = 30;
    			this->label_contraseña->Text = L"Contraseña:";
    			// 
    			// statusStrip1
    			// 
    			this->statusStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(1) {this->toolStripStatusLabel1});
    			this->statusStrip1->Location = System::Drawing::Point(0, 504);
    			this->statusStrip1->Name = L"statusStrip1";
    			this->statusStrip1->Size = System::Drawing::Size(623, 22);
    			this->statusStrip1->TabIndex = 29;
    			this->statusStrip1->Text = L"statusStrip1";
    			// 
    			// toolStripStatusLabel1
    			// 
    			this->toolStripStatusLabel1->Name = L"toolStripStatusLabel1";
    			this->toolStripStatusLabel1->Size = System::Drawing::Size(12, 17);
    			this->toolStripStatusLabel1->Text = L"-";
    			// 
    			// textBox_contra
    			// 
    			this->textBox_contra->Location = System::Drawing::Point(250, 88);
    			this->textBox_contra->Name = L"textBox_contra";
    			this->textBox_contra->PasswordChar = '*';
    			this->textBox_contra->Size = System::Drawing::Size(100, 20);
    			this->textBox_contra->TabIndex = 28;
    			this->textBox_contra->Text = L"55s750oo21052105";
    			// 
    			// label_mensaje
    			// 
    			this->label_mensaje->AutoSize = true;
    			this->label_mensaje->Location = System::Drawing::Point(35, 228);
    			this->label_mensaje->Name = L"label_mensaje";
    			this->label_mensaje->Size = System::Drawing::Size(50, 13);
    			this->label_mensaje->TabIndex = 27;
    			this->label_mensaje->Text = L"Mensaje:";
    			// 
    			// label_asunto
    			// 
    			this->label_asunto->AutoSize = true;
    			this->label_asunto->Location = System::Drawing::Point(35, 172);
    			this->label_asunto->Name = L"label_asunto";
    			this->label_asunto->Size = System::Drawing::Size(43, 13);
    			this->label_asunto->TabIndex = 26;
    			this->label_asunto->Text = L"Asunto:";
    			// 
    			// label_receptor
    			// 
    			this->label_receptor->AutoSize = true;
    			this->label_receptor->Location = System::Drawing::Point(35, 121);
    			this->label_receptor->Name = L"label_receptor";
    			this->label_receptor->Size = System::Drawing::Size(54, 13);
    			this->label_receptor->TabIndex = 25;
    			this->label_receptor->Text = L"Receptor:";
    			// 
    			// label_enviar
    			// 
    			this->label_enviar->AutoSize = true;
    			this->label_enviar->Location = System::Drawing::Point(35, 72);
    			this->label_enviar->Name = L"label_enviar";
    			this->label_enviar->Size = System::Drawing::Size(40, 13);
    			this->label_enviar->TabIndex = 24;
    			this->label_enviar->Text = L"Enviar:";
    			// 
    			// richTextBox_mensajazo
    			// 
    			this->richTextBox_mensajazo->Location = System::Drawing::Point(38, 244);
    			this->richTextBox_mensajazo->Name = L"richTextBox_mensajazo";
    			this->richTextBox_mensajazo->Size = System::Drawing::Size(560, 228);
    			this->richTextBox_mensajazo->TabIndex = 23;
    			this->richTextBox_mensajazo->Text = L"Hey man.";
    			// 
    			// textBox_asunto
    			// 
    			this->textBox_asunto->Location = System::Drawing::Point(38, 188);
    			this->textBox_asunto->Name = L"textBox_asunto";
    			this->textBox_asunto->Size = System::Drawing::Size(100, 20);
    			this->textBox_asunto->TabIndex = 22;
    			this->textBox_asunto->Text = L"Mr";
    			// 
    			// textBox_receptor
    			// 
    			this->textBox_receptor->Location = System::Drawing::Point(38, 137);
    			this->textBox_receptor->Name = L"textBox_receptor";
    			this->textBox_receptor->Size = System::Drawing::Size(206, 20);
    			this->textBox_receptor->TabIndex = 21;
    			this->textBox_receptor->Text = L"metaconta@gmail.com";
    			// 
    			// textBox_emisor
    			// 
    			this->textBox_emisor->Location = System::Drawing::Point(38, 88);
    			this->textBox_emisor->Name = L"textBox_emisor";
    			this->textBox_emisor->Size = System::Drawing::Size(206, 20);
    			this->textBox_emisor->TabIndex = 20;
    			this->textBox_emisor->Text = L"celltium@gmail.com";
    			// 
    			// button_enviar
    			// 
    			this->button_enviar->Location = System::Drawing::Point(523, 478);
    			this->button_enviar->Name = L"button_enviar";
    			this->button_enviar->Size = System::Drawing::Size(75, 23);
    			this->button_enviar->TabIndex = 19;
    			this->button_enviar->Text = L"Enviar";
    			this->button_enviar->UseVisualStyleBackColor = true;
    			this->button_enviar->Click += gcnew System::EventHandler(this, &Form1::button_enviar_Click);
    			// 
    			// openFileDialog1
    			// 
    			this->openFileDialog1->FileName = L"openFileDialog1";
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(623, 526);
    			this->Controls->Add(this->label_puerto);
    			this->Controls->Add(this->label_smtp);
    			this->Controls->Add(this->textBox_puerto);
    			this->Controls->Add(this->textBox_smtp);
    			this->Controls->Add(this->label_buscar_adjunto);
    			this->Controls->Add(this->button_buscar_adjunto);
    			this->Controls->Add(this->textBox_ruta_buscar_archivo);
    			this->Controls->Add(this->label_contraseña);
    			this->Controls->Add(this->statusStrip1);
    			this->Controls->Add(this->textBox_contra);
    			this->Controls->Add(this->label_mensaje);
    			this->Controls->Add(this->label_asunto);
    			this->Controls->Add(this->label_receptor);
    			this->Controls->Add(this->label_enviar);
    			this->Controls->Add(this->richTextBox_mensajazo);
    			this->Controls->Add(this->textBox_asunto);
    			this->Controls->Add(this->textBox_receptor);
    			this->Controls->Add(this->textBox_emisor);
    			this->Controls->Add(this->button_enviar);
    			this->Name = L"Form1";
    			this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
    			this->Text = L"Form1";
    			this->statusStrip1->ResumeLayout(false);
    			this->statusStrip1->PerformLayout();
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    	private: System::Void button_enviar_Click(System::Object^ sender, System::EventArgs^ e) {
    
    			toolStripStatusLabel1->Text = " ";
          button_enviar->Enabled = false;
          //La cadena "servidor" es el servidor de correo que enviará tu mensaje.
          String^ servidor = textBox_smtp->Text;
          // Crea el mensaje estableciendo quién lo manda y quién lo recibe.
          MailMessage^ mensaje = gcnew MailMessage(
            textBox_emisor->Text,
            textBox_receptor->Text,
            textBox_asunto->Text,
            richTextBox_mensajazo->Text);
    
    			try
    			{
            // Envía archivo adjunto.
            Attachment^ archivo_adjunto = gcnew Attachment(textBox_ruta_buscar_archivo->Text);
            mensaje->Attachments->Add(archivo_adjunto);
    			}
    
    			catch ()
    			{
    
    			}
    
    
    
          //Envía el mensaje.
          SmtpClient^ cliente = gcnew SmtpClient(servidor);
    
          cliente->UseDefaultCredentials = false;
          cliente->Credentials = gcnew NetworkCredential(textBox_emisor->Text, textBox_contra->Text);
          cliente->Port = Convert::ToInt32(textBox_puerto->Text);
          cliente->Host = textBox_smtp->Text;
          cliente->EnableSsl = true;
    
          //Añade credenciales si el servidor lo requiere.
          //cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
          /* try
          {*/
            cliente->Send(mensaje);
          //}
          //catch (SmtpException)
          //{
          //  MessageBox::Show("No haz introducido bien la contraseña. \nNo admite ciertos archivos que puedan contener virus como .exe, etc.\nEl archivo es demasiado grande.", "Aviso:", 
          //    MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
          //}
          toolStripStatusLabel1->Text = "Enviado.";
          button_enviar->Enabled = true;
    			 }
    private: System::Void button_buscar_adjunto_Click(System::Object^ sender, System::EventArgs^ e) {
    			 if ( openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
          {
            textBox_ruta_buscar_archivo->Text = openFileDialog1->FileName->ToString();
          }
    		 }
    };
    }
    
    
    


    http://electronica-pic.blogspot.com
    • Marcado como respuesta Metaconta lunes, 2 de mayo de 2011 14:32
    lunes, 2 de mayo de 2011 14:31

Todas las respuestas

  • No soy súper experto en C++/CLI, pero aquí van un par de comentarios que espero te sirvan. 

    1.- Cuando instancies objetos administrados, usa gcnew. Recuerda los punteros administrados también. Por ejemplo: 

    MailMessage^ mensaje = gcnew MailMessage(...);
    

    2.- Usa el operador de resolución :: para llamar métodos estáticos, y -> para los no estáticos, cuando trates con objetos administrados. Por ejemplo, MessageBox::Show es correcto porque Show es método estático; pero cliente::Send es inválido porque Send no lo es: en su lugar, deberías poner cliente->Send(mensaje). 

    Finalmente, recomendarte este excelente artículo introductorio de Nishant Sivakumar, para aclarar conceptos e ideas que tengas. 

    Saludos. 



    Fernando Gómez
    fermasmas.wordpress.com
    • Marcado como respuesta Metaconta lunes, 2 de mayo de 2011 14:31
    miércoles, 27 de abril de 2011 23:45
  • Hola:

    Gracias or la explicación he quuitado muchos errores, aún algunos se mantienen y o se como solventarlos. Por ahora he hecho esto:

    private: System::Void button_enviar_Click(System::Object^ sender, System::EventArgs^ e) {
    
    			toolStripStatusLabel1->Text = " ";
          button_enviar->Enabled = false;
          //La cadena "servidor" es el servidor de correo que enviará tu mensaje.
          String^ servidor = textBox_smtp->Text;
          // Crea el mensaje estableciendo quién lo manda y quién lo recibe.
          MailMessage^ mensaje = gcnew MailMessage(
            textBox_emisor->Text,
            textBox_receptor->Text,
            textBox_asunto->Text,
            richTextBox_mensajazo->Text);
    
          /*try
          {*/
            // Envía archivo adjunto.
            Attachment^ archivo_adjunto = gcnew Attachment(textBox_ruta_buscar_archivo->Text);
            mensaje->Attachments->Add(archivo_adjunto);
          //}
    
          //catch (ArgumentException)
          //{
          //  // Sin asunto.
          //}
    
    
          //Envía el mensaje.
          SmtpClient^ cliente = gcnew SmtpClient(servidor);
    
          cliente->UseDefaultCredentials = false;
          cliente-Credentials^ = gcnew System->Net->NetworkCredential(textBox_emisor->Text, textBox_contra->Text);
          cliente->Port = Convert->ToInt32(textBox_puerto->Text);
          cliente->Host = textBox_smtp->Text;
          cliente->EnableSsl = true;
    
          //Añade credenciales si el servidor lo requiere.
          //cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
          /* try
          {*/
            cliente->Send(mensaje);
          //}
          //catch (SmtpException)
          //{
          //  MessageBox::Show("No haz introducido bien la contraseña. \nNo admite ciertos archivos que puedan contener virus como .exe, etc.\nEl archivo es demasiado grande.", "Aviso:", 
          //    MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
          //}
          toolStripStatusLabel1->Text = "Enviado.";
          button_enviar->Enabled = true;
    			 }
    

    Los errores que muestra al compilar son:

    • 1>------ Operación Generar iniciada: proyecto: email_smtp_cpp, configuración: Debug Win32 ------
      1>  email_smtp_cpp.cpp
      1>c:\users\hunter\documents\visual studio 2010\projects\email_smtp_cpp\email_smtp_cpp\Form1.h(341): error C2065: 'Credentials' : identificador no declarado
      1>c:\users\hunter\documents\visual studio 2010\projects\email_smtp_cpp\email_smtp_cpp\Form1.h(341): error C2059: error de sintaxis : '='
      1>c:\users\hunter\documents\visual studio 2010\projects\email_smtp_cpp\email_smtp_cpp\Form1.h(342): error C2275: 'System::Convert' : uso no válido de este tipo como expresión
      1>          c:\program files (x86)\reference assemblies\microsoft\framework\.netframework\v4.0\mscorlib.dll : vea la declaración de 'System::Convert'
      1>c:\users\hunter\documents\visual studio 2010\projects\email_smtp_cpp\email_smtp_cpp\Form1.h(342): error C2227: el operando izquierdo de '->ToInt32' debe señalar al tipo class/struct/union/generic
      ========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========

    Precisamente señala los errores por este trozo de código:

          SmtpClient^ cliente = gcnew SmtpClient(servidor);
    
          cliente->UseDefaultCredentials = false;
          cliente-Credentials^ = gcnew System->Net->NetworkCredential(textBox_emisor->Text, textBox_contra->Text);
          cliente->Port = Convert->ToInt32(textBox_puerto->Text);
          cliente->Host = textBox_smtp->Text;
          cliente->EnableSsl = true;
    

    Saludo.


    http://electronica-pic.blogspot.com
    jueves, 28 de abril de 2011 13:44
  • Hola de nuevo:

    Analisando más a fondo, ya me queda menos.

     

       cliente->Credentials^ = gcnew System::Net::NetworkCredential(textBox_emisor->Text, textBox_contra->Text);
       cliente->Port^ = Convert->ToInt32(textBox_puerto->Text);
    
    1>------ Operación Generar iniciada: proyecto: email_smtp_cpp, configuración: Debug Win32 ------
    1>  email_smtp_cpp.cpp
    1>c:\users\hunter\documents\visual studio 2010\projects\email_smtp_cpp\email_smtp_cpp\Form1.h(341): error C2059: error de sintaxis : '='
    1>c:\users\hunter\documents\visual studio 2010\projects\email_smtp_cpp\email_smtp_cpp\Form1.h(342): error C2059: error de sintaxis : '='
    ========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========

    No logro encontrar los fallos.

    http://msdn.microsoft.com/es-es/library/system.windows.controls.alternationconverter.convert.aspx


    http://electronica-pic.blogspot.com
    jueves, 28 de abril de 2011 15:31
  • Buenas:

    ¿Alguna ayuda de sintaxis?

    error C2059: error de sintaxis : '='

    Todavía no doy con el error.

    Saludo.
    http://electronica-pic.blogspot.com
    lunes, 2 de mayo de 2011 6:12
  • Ya me salió.

    #pragma once
    
    namespace email_smtp_cpp {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	using namespace System::Net; // No olvidar.
    	using namespace System::Net::Mail;
    
    
    	// http://social.msdn.microsoft.com/Forums/es-ES/vcppdotnetes/thread/fcf49d6d-89ff-43de-a4ad-1245ed06f885#2573322c-7082-4c58-be97-f46080a8c45d
    
    	/// <summary>
    	/// Resumen de Form1
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: agregar código de constructor aquí
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Limpiar los recursos que se estén utilizando.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Label^ label_puerto;
    	protected: 
    	private: System::Windows::Forms::Label^ label_smtp;
    	private: System::Windows::Forms::TextBox^ textBox_puerto;
    	private: System::Windows::Forms::TextBox^ textBox_smtp;
    	private: System::Windows::Forms::Label^ label_buscar_adjunto;
    	private: System::Windows::Forms::Button^ button_buscar_adjunto;
    	private: System::Windows::Forms::TextBox^ textBox_ruta_buscar_archivo;
    	private: System::Windows::Forms::Label^ label_contraseña;
    	private: System::Windows::Forms::StatusStrip^ statusStrip1;
    	private: System::Windows::Forms::ToolStripStatusLabel^ toolStripStatusLabel1;
    	private: System::Windows::Forms::TextBox^ textBox_contra;
    	private: System::Windows::Forms::Label^ label_mensaje;
    	private: System::Windows::Forms::Label^ label_asunto;
    	private: System::Windows::Forms::Label^ label_receptor;
    	private: System::Windows::Forms::Label^ label_enviar;
    	private: System::Windows::Forms::RichTextBox^ richTextBox_mensajazo;
    	private: System::Windows::Forms::TextBox^ textBox_asunto;
    	private: System::Windows::Forms::TextBox^ textBox_receptor;
    	private: System::Windows::Forms::TextBox^ textBox_emisor;
    	private: System::Windows::Forms::Button^ button_enviar;
    	private: System::Windows::Forms::OpenFileDialog^ openFileDialog1;
    
    	private:
    		/// <summary>
    		/// Variable del diseñador requerida.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Método necesario para admitir el Diseñador. No se puede modificar
    		/// el contenido del método con el editor de código.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->label_puerto = (gcnew System::Windows::Forms::Label());
    			this->label_smtp = (gcnew System::Windows::Forms::Label());
    			this->textBox_puerto = (gcnew System::Windows::Forms::TextBox());
    			this->textBox_smtp = (gcnew System::Windows::Forms::TextBox());
    			this->label_buscar_adjunto = (gcnew System::Windows::Forms::Label());
    			this->button_buscar_adjunto = (gcnew System::Windows::Forms::Button());
    			this->textBox_ruta_buscar_archivo = (gcnew System::Windows::Forms::TextBox());
    			this->label_contraseña = (gcnew System::Windows::Forms::Label());
    			this->statusStrip1 = (gcnew System::Windows::Forms::StatusStrip());
    			this->toolStripStatusLabel1 = (gcnew System::Windows::Forms::ToolStripStatusLabel());
    			this->textBox_contra = (gcnew System::Windows::Forms::TextBox());
    			this->label_mensaje = (gcnew System::Windows::Forms::Label());
    			this->label_asunto = (gcnew System::Windows::Forms::Label());
    			this->label_receptor = (gcnew System::Windows::Forms::Label());
    			this->label_enviar = (gcnew System::Windows::Forms::Label());
    			this->richTextBox_mensajazo = (gcnew System::Windows::Forms::RichTextBox());
    			this->textBox_asunto = (gcnew System::Windows::Forms::TextBox());
    			this->textBox_receptor = (gcnew System::Windows::Forms::TextBox());
    			this->textBox_emisor = (gcnew System::Windows::Forms::TextBox());
    			this->button_enviar = (gcnew System::Windows::Forms::Button());
    			this->openFileDialog1 = (gcnew System::Windows::Forms::OpenFileDialog());
    			this->statusStrip1->SuspendLayout();
    			this->SuspendLayout();
    			// 
    			// label_puerto
    			// 
    			this->label_puerto->AutoSize = true;
    			this->label_puerto->Location = System::Drawing::Point(459, 72);
    			this->label_puerto->Name = L"label_puerto";
    			this->label_puerto->Size = System::Drawing::Size(41, 13);
    			this->label_puerto->TabIndex = 37;
    			this->label_puerto->Text = L"Puerto:";
    			// 
    			// label_smtp
    			// 
    			this->label_smtp->AutoSize = true;
    			this->label_smtp->Location = System::Drawing::Point(353, 72);
    			this->label_smtp->Name = L"label_smtp";
    			this->label_smtp->Size = System::Drawing::Size(82, 13);
    			this->label_smtp->TabIndex = 36;
    			this->label_smtp->Text = L"Servidor SMTP:";
    			// 
    			// textBox_puerto
    			// 
    			this->textBox_puerto->Location = System::Drawing::Point(462, 88);
    			this->textBox_puerto->Name = L"textBox_puerto";
    			this->textBox_puerto->Size = System::Drawing::Size(100, 20);
    			this->textBox_puerto->TabIndex = 35;
    			this->textBox_puerto->Text = L"587";
    			// 
    			// textBox_smtp
    			// 
    			this->textBox_smtp->Location = System::Drawing::Point(356, 88);
    			this->textBox_smtp->Name = L"textBox_smtp";
    			this->textBox_smtp->Size = System::Drawing::Size(100, 20);
    			this->textBox_smtp->TabIndex = 34;
    			this->textBox_smtp->Text = L"smtp.gmail.com";
    			// 
    			// label_buscar_adjunto
    			// 
    			this->label_buscar_adjunto->AutoSize = true;
    			this->label_buscar_adjunto->Location = System::Drawing::Point(189, 172);
    			this->label_buscar_adjunto->Name = L"label_buscar_adjunto";
    			this->label_buscar_adjunto->Size = System::Drawing::Size(84, 13);
    			this->label_buscar_adjunto->TabIndex = 33;
    			this->label_buscar_adjunto->Text = L"Archivo adjunto:";
    			// 
    			// button_buscar_adjunto
    			// 
    			this->button_buscar_adjunto->Location = System::Drawing::Point(523, 185);
    			this->button_buscar_adjunto->Name = L"button_buscar_adjunto";
    			this->button_buscar_adjunto->Size = System::Drawing::Size(75, 23);
    			this->button_buscar_adjunto->TabIndex = 32;
    			this->button_buscar_adjunto->Text = L"Buscar";
    			this->button_buscar_adjunto->UseVisualStyleBackColor = true;
    			this->button_buscar_adjunto->Click += gcnew System::EventHandler(this, &Form1::button_buscar_adjunto_Click);
    			// 
    			// textBox_ruta_buscar_archivo
    			// 
    			this->textBox_ruta_buscar_archivo->Location = System::Drawing::Point(192, 188);
    			this->textBox_ruta_buscar_archivo->Name = L"textBox_ruta_buscar_archivo";
    			this->textBox_ruta_buscar_archivo->Size = System::Drawing::Size(325, 20);
    			this->textBox_ruta_buscar_archivo->TabIndex = 31;
    			// 
    			// label_contraseña
    			// 
    			this->label_contraseña->AutoSize = true;
    			this->label_contraseña->Location = System::Drawing::Point(247, 72);
    			this->label_contraseña->Name = L"label_contraseña";
    			this->label_contraseña->Size = System::Drawing::Size(64, 13);
    			this->label_contraseña->TabIndex = 30;
    			this->label_contraseña->Text = L"Contraseña:";
    			// 
    			// statusStrip1
    			// 
    			this->statusStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(1) {this->toolStripStatusLabel1});
    			this->statusStrip1->Location = System::Drawing::Point(0, 504);
    			this->statusStrip1->Name = L"statusStrip1";
    			this->statusStrip1->Size = System::Drawing::Size(623, 22);
    			this->statusStrip1->TabIndex = 29;
    			this->statusStrip1->Text = L"statusStrip1";
    			// 
    			// toolStripStatusLabel1
    			// 
    			this->toolStripStatusLabel1->Name = L"toolStripStatusLabel1";
    			this->toolStripStatusLabel1->Size = System::Drawing::Size(12, 17);
    			this->toolStripStatusLabel1->Text = L"-";
    			// 
    			// textBox_contra
    			// 
    			this->textBox_contra->Location = System::Drawing::Point(250, 88);
    			this->textBox_contra->Name = L"textBox_contra";
    			this->textBox_contra->PasswordChar = '*';
    			this->textBox_contra->Size = System::Drawing::Size(100, 20);
    			this->textBox_contra->TabIndex = 28;
    			this->textBox_contra->Text = L"55s750oo21052105";
    			// 
    			// label_mensaje
    			// 
    			this->label_mensaje->AutoSize = true;
    			this->label_mensaje->Location = System::Drawing::Point(35, 228);
    			this->label_mensaje->Name = L"label_mensaje";
    			this->label_mensaje->Size = System::Drawing::Size(50, 13);
    			this->label_mensaje->TabIndex = 27;
    			this->label_mensaje->Text = L"Mensaje:";
    			// 
    			// label_asunto
    			// 
    			this->label_asunto->AutoSize = true;
    			this->label_asunto->Location = System::Drawing::Point(35, 172);
    			this->label_asunto->Name = L"label_asunto";
    			this->label_asunto->Size = System::Drawing::Size(43, 13);
    			this->label_asunto->TabIndex = 26;
    			this->label_asunto->Text = L"Asunto:";
    			// 
    			// label_receptor
    			// 
    			this->label_receptor->AutoSize = true;
    			this->label_receptor->Location = System::Drawing::Point(35, 121);
    			this->label_receptor->Name = L"label_receptor";
    			this->label_receptor->Size = System::Drawing::Size(54, 13);
    			this->label_receptor->TabIndex = 25;
    			this->label_receptor->Text = L"Receptor:";
    			// 
    			// label_enviar
    			// 
    			this->label_enviar->AutoSize = true;
    			this->label_enviar->Location = System::Drawing::Point(35, 72);
    			this->label_enviar->Name = L"label_enviar";
    			this->label_enviar->Size = System::Drawing::Size(40, 13);
    			this->label_enviar->TabIndex = 24;
    			this->label_enviar->Text = L"Enviar:";
    			// 
    			// richTextBox_mensajazo
    			// 
    			this->richTextBox_mensajazo->Location = System::Drawing::Point(38, 244);
    			this->richTextBox_mensajazo->Name = L"richTextBox_mensajazo";
    			this->richTextBox_mensajazo->Size = System::Drawing::Size(560, 228);
    			this->richTextBox_mensajazo->TabIndex = 23;
    			this->richTextBox_mensajazo->Text = L"Hey man.";
    			// 
    			// textBox_asunto
    			// 
    			this->textBox_asunto->Location = System::Drawing::Point(38, 188);
    			this->textBox_asunto->Name = L"textBox_asunto";
    			this->textBox_asunto->Size = System::Drawing::Size(100, 20);
    			this->textBox_asunto->TabIndex = 22;
    			this->textBox_asunto->Text = L"Mr";
    			// 
    			// textBox_receptor
    			// 
    			this->textBox_receptor->Location = System::Drawing::Point(38, 137);
    			this->textBox_receptor->Name = L"textBox_receptor";
    			this->textBox_receptor->Size = System::Drawing::Size(206, 20);
    			this->textBox_receptor->TabIndex = 21;
    			this->textBox_receptor->Text = L"metaconta@gmail.com";
    			// 
    			// textBox_emisor
    			// 
    			this->textBox_emisor->Location = System::Drawing::Point(38, 88);
    			this->textBox_emisor->Name = L"textBox_emisor";
    			this->textBox_emisor->Size = System::Drawing::Size(206, 20);
    			this->textBox_emisor->TabIndex = 20;
    			this->textBox_emisor->Text = L"celltium@gmail.com";
    			// 
    			// button_enviar
    			// 
    			this->button_enviar->Location = System::Drawing::Point(523, 478);
    			this->button_enviar->Name = L"button_enviar";
    			this->button_enviar->Size = System::Drawing::Size(75, 23);
    			this->button_enviar->TabIndex = 19;
    			this->button_enviar->Text = L"Enviar";
    			this->button_enviar->UseVisualStyleBackColor = true;
    			this->button_enviar->Click += gcnew System::EventHandler(this, &Form1::button_enviar_Click);
    			// 
    			// openFileDialog1
    			// 
    			this->openFileDialog1->FileName = L"openFileDialog1";
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(623, 526);
    			this->Controls->Add(this->label_puerto);
    			this->Controls->Add(this->label_smtp);
    			this->Controls->Add(this->textBox_puerto);
    			this->Controls->Add(this->textBox_smtp);
    			this->Controls->Add(this->label_buscar_adjunto);
    			this->Controls->Add(this->button_buscar_adjunto);
    			this->Controls->Add(this->textBox_ruta_buscar_archivo);
    			this->Controls->Add(this->label_contraseña);
    			this->Controls->Add(this->statusStrip1);
    			this->Controls->Add(this->textBox_contra);
    			this->Controls->Add(this->label_mensaje);
    			this->Controls->Add(this->label_asunto);
    			this->Controls->Add(this->label_receptor);
    			this->Controls->Add(this->label_enviar);
    			this->Controls->Add(this->richTextBox_mensajazo);
    			this->Controls->Add(this->textBox_asunto);
    			this->Controls->Add(this->textBox_receptor);
    			this->Controls->Add(this->textBox_emisor);
    			this->Controls->Add(this->button_enviar);
    			this->Name = L"Form1";
    			this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
    			this->Text = L"Form1";
    			this->statusStrip1->ResumeLayout(false);
    			this->statusStrip1->PerformLayout();
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    	private: System::Void button_enviar_Click(System::Object^ sender, System::EventArgs^ e) {
    
    			toolStripStatusLabel1->Text = " ";
          button_enviar->Enabled = false;
          //La cadena "servidor" es el servidor de correo que enviará tu mensaje.
          String^ servidor = textBox_smtp->Text;
          // Crea el mensaje estableciendo quién lo manda y quién lo recibe.
          MailMessage^ mensaje = gcnew MailMessage(
            textBox_emisor->Text,
            textBox_receptor->Text,
            textBox_asunto->Text,
            richTextBox_mensajazo->Text);
    
    			try
    			{
            // Envía archivo adjunto.
            Attachment^ archivo_adjunto = gcnew Attachment(textBox_ruta_buscar_archivo->Text);
            mensaje->Attachments->Add(archivo_adjunto);
    			}
    
    			catch ()
    			{
    
    			}
    
    
    
          //Envía el mensaje.
          SmtpClient^ cliente = gcnew SmtpClient(servidor);
    
          cliente->UseDefaultCredentials = false;
          cliente->Credentials = gcnew NetworkCredential(textBox_emisor->Text, textBox_contra->Text);
          cliente->Port = Convert::ToInt32(textBox_puerto->Text);
          cliente->Host = textBox_smtp->Text;
          cliente->EnableSsl = true;
    
          //Añade credenciales si el servidor lo requiere.
          //cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
          /* try
          {*/
            cliente->Send(mensaje);
          //}
          //catch (SmtpException)
          //{
          //  MessageBox::Show("No haz introducido bien la contraseña. \nNo admite ciertos archivos que puedan contener virus como .exe, etc.\nEl archivo es demasiado grande.", "Aviso:", 
          //    MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
          //}
          toolStripStatusLabel1->Text = "Enviado.";
          button_enviar->Enabled = true;
    			 }
    private: System::Void button_buscar_adjunto_Click(System::Object^ sender, System::EventArgs^ e) {
    			 if ( openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
          {
            textBox_ruta_buscar_archivo->Text = openFileDialog1->FileName->ToString();
          }
    		 }
    };
    }
    
    
    


    http://electronica-pic.blogspot.com
    • Marcado como respuesta Metaconta lunes, 2 de mayo de 2011 14:32
    lunes, 2 de mayo de 2011 14:31