Ho scritto un programma C# per inviare una e-mail, che funziona perfettamente. Inoltre, ho uno script PHP per inviare e-mail, che funziona perfettamente anche.Invio di e-mail dal web hosting senza dover utilizzare nome utente e password
Ma la mia domanda è: E 'possibile inviare una e-mail con C# come si fa da PHP in cui non è necessario specificare le credenziali, server, porte, ecc
Vorrei utilizzare C# invece di PHP, perché sto creando un'applicazione web ASP.Net.
Questo è il mio attuale codice C#:
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);
}
}
}
Questo è come si è fatto 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";
?>
Non sto chiedendo per voi a scrivere il mio codice, ma forse si potrebbe fornire alcune informazioni o fammi sapere se è possibile o no.
Edit:
mia domanda non è di non utilizza un server smtp, ma come inviare una e-mail senza dover inserire username e password. So che funzionerà solo se la richiesta di inviare l'e-mail proviene dal mio server.
realtà PHP * fa * Usa [Impostazioni vari server di posta elettronica] (http: // php. net/manual/en/mail.configuration.php), tuttavia sono memorizzati nel file php.ini e hanno valori predefiniti incorporati. Immagino che tu possa cambiarli in fase di esecuzione con 'ini_set()' se hai bisogno di apportare modifiche che non siano a livello di sistema. – Mike
@Mike Non sapevo veramente cosa cercare, ma ho cercato spesso su google, forse per le cose sbagliate ... proverò i collegamenti che mi hai dato. client.UseDefaultCredentials = true; sembra promettente. – Creator
In realtà ho rimosso il mio ultimo commento perché non penso che faccia quello che pensavo. Sembra che sia usato quando è necessario autenticarsi con il server di posta. Correggimi se sbaglio. Non conosco affatto C#. – Mike