0

特定の件名、本文、添付ファイルを含む電子メールを送信するようにオペレーティングシステムに要求するにはどうすればよいですか?OSは、フィールドがプリロードされたデフォルトの電子メールクライアントを起動する必要がありますか?

具体的には、C#.netで使用できるAPI関数は何ですか?

4

4 に答える 4

4

Outlookに電子メールを送信させたいので、ポート番号とホストをOutlookのものに置き換えます。

事前に読み込まれたフィールドでOutlookを開くには:

using System.Diagnostics;
// ...
Process.Start(String.Format("mailto:{0}?subject={1}&cc={2}&bcc={3}&body={4}", address, subject, cc, bcc, body))

メールを直接送信するには:

using System.Net;
using System.Net.Mail;
// ...
var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@example.com", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient {
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using(var message = new MailMessage(fromAddress, toAddress) {
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}
于 2012-08-07T05:22:47.777 に答える
1

SmtpClientこれは、テストを簡素化するシステム用のシンプルなアダプターです。

 public class SmtpClientAdapter : ISmtpClient
    {
    private bool disposed;

    private SmtpClient smtpClient = new SmtpClient();

    public SendResult Send(MailMessage message)
    {
        if (disposed)
        {
            throw new ObjectDisposedException(GetType().FullName);
        }

        try
        {
            smtpClient.Send(message);
            return SendResult.Successful;
        }
        catch (Exception e)
        {
            return new SendResult(false, e.Message);
        }
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposed)
        {
            return;
        }

        if (disposing)
        {
            if (smtpClient != null)
            {
                smtpClient.Dispose();
                smtpClient = null;
            }
        }

        disposed = true;
    }
}

public class SendResult : SimpleResult
    {
        public SendResult(bool success, string message)
            : base(success, message)
        {
        }

        public static SendResult Successful
        {
            get
            {
                return new SendResult(true, string.Empty);
            }
        }
    }

使用法

        var emailFrom = new MailAddress(sender);
        var emailTo = new MailAddress(recipient);

        var mailMessage = new MailMessage(emailFrom, emailTo)
        {
            Subject = "Subject ",
            Body = "Body"
        };

        using (var client = new SmtpClientAdapter())
        {
            return client.Send(mailMessage);
        }
于 2012-08-07T05:17:42.660 に答える
1

これを行う簡単な方法は次のとおりです。

public void SendEmail(string address, string subject, string message)
{
string email = "yrshaikh.mail@gmail.com";
string password = "put-your-GMAIL-password-here";

var loginInfo = new NetworkCredential(email, password);
var msg = new MailMessage();
var smtpClient = new SmtpClient("smtp.gmail.com", 587);

msg.From = new MailAddress(email);
msg.To.Add(new MailAddress(address));
msg.Subject = subject;
msg.Body = message;
msg.IsBodyHtml = true;

smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = loginInfo;
smtpClient.Send(msg);
}

ソース:リンク

于 2012-08-07T05:28:17.127 に答える
0

このためのオペレーティングシステムAPI関数は使用できません。

于 2012-08-07T05:35:31.520 に答える