Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending email from webhosting without having to use username and password

I have written a C# program to send an email, which works perfectly. Additionally, I have a PHP script to send emails, which works perfectly aswell.

But my question is : Is it possible to send an email with C# like you do from PHP where you don't need to specify credentials, server, ports, etc.

I would like to use C# instead of PHP, because I am creating an ASP.Net web application.

This is my current C# code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Net.Mail;
using System.Net;

namespace $rootnamespace$
{
public partial class $safeitemname$ : Form
{
    public $safeitemname$()
    {
        InitializeComponent();
    }

    private void AttachB_Click(object sender, EventArgs e)
    {
        if (AttachDia.ShowDialog() == DialogResult.OK)
        {
            string AttachF1 = AttachDia.FileName.ToString();
            AttachTB.Text = AttachF1;
            AttachPB.Visible = true;
            AttachIIB.Visible = true;
            AttachB.Visible = false;
        }
    }

    private void AttachIIB_Click(object sender, EventArgs e)
    {
        if (AttachDia.ShowDialog() == DialogResult.OK)
        {
            string AttachF1 = AttachDia.FileName.ToString();
            AttachIITB.Text = AttachF1;
            AttachPB.Visible = true;

        }
    }





    private void SendB_Click(object sender, EventArgs e)
    {
        try
        {
            SmtpClient client = new SmtpClient(EmailSmtpAdresTB.Text);
            client.EnableSsl = true;
            client.Timeout = 20000;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential(EmailUserNameTB.Text, EmailUserPasswordTB.Text);
            MailMessage Msg = new MailMessage();
            Msg.To.Add(SendToTB.Text);
            Msg.From = new MailAddress(SendFromTB.Text);
            Msg.Subject = SubjectTB.Text;
            Msg.Body = EmailTB.Text;

            /// Add Attachments to mail or Not
            if (AttachTB.Text == "")
            {
                if (EmailSmtpPortTB.Text != null)
                    client.Port = System.Convert.ToInt32(EmailSmtpPortTB.Text);

                client.Send(Msg);
                MessageBox.Show("Successfuly Send Message !");
            }
            else 
            {
                Msg.Attachments.Add(new Attachment(AttachTB.Text));
                Msg.Attachments.Add(new Attachment(AttachIITB.Text));
                if (EmailSmtpPortTB.Text != null)
                client.Port = System.Convert.ToInt32(EmailSmtpPortTB.Text);

                client.Send(Msg);
                MessageBox.Show("Successfuly Send Message !");
            }


        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void settingsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        this.Validate();
        this.settingsBindingSource.EndEdit();
        this.tableAdapterManager.UpdateAll(this.awDushiHomesDBDataSet);

    }

    private void awDushiHomesEmail_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'awDushiHomesDBDataSet.Settings' table. You can move, or remove it, as needed.
        this.settingsTableAdapter.Fill(this.awDushiHomesDBDataSet.Settings);

    }
  }
}

This is how it is done in PHP:

<?php
//define the receiver of the email
$to = '[email protected]';

//define the subject of the email
$subject = 'Test email with attachment';

//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));

//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: [email protected]\r\nReply-To: [email protected]";

//add boundary string and mime type specification
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";

//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks
$attachment = chunk_split(base64_encode(file_get_contents('PDFs\Doc1.pdf')));

//define the body of the message.
ob_start(); //Turn on output buffering
?>

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello World!!!
This is simple text email message.

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>

--PHP-alt-<?php echo $random_hash; ?>--

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: application/zip; name="Doc1.pdf" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--

<?php
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();

//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";
?> 

I'm not asking for you to write my code but maybe you could provide some info or let me know if its possible or not.

Edit:

My question is not about not using a smtp server but how to send an email without having to enter username and password. I know, that it will only work if the request to send the email comes from my server.

like image 423
Creator Avatar asked Dec 10 '15 01:12

Creator


2 Answers

The reason why in PHP you can send a mail without specifying SMTP credentials is because someone else already configured php.ini or sendmail.ini for you (files that the php interpreter use to get some values).

This is usually the case with a managed hosting (or if you use php on your dev pc with tools like AMPPS which can make you edit easily the SMTP settings through an UI and forgot it).

In ASP.net / c# there is the app.config or web.config file, where you can inject smtp settings (in the <mailSettings> tag) and therefore achieve the same result as PHP (the SmtpClient will automatically use the credentials stored there).

See these questions for an example:

SmtpClient and app.config system.net configuration

SMTP Authentication with config file's MailSettings

like image 89
fruggiero Avatar answered Oct 22 '22 11:10

fruggiero


At these posts, to which likely this will be a duplicate of, you will find a couple of ways how to send email using ASP.NET.

  • How to send email in ASP.NET C#
  • Sending mail without installing an SMTP server

Note: You can't send email without a smtp server, though you don't need one of your own if someone else let you use their's.

like image 22
3 revs Avatar answered Oct 22 '22 11:10

3 revs