ホームページ php教程 php手册 C#WindowsService は IBMLotusNotes を呼び出して電子メールを送信します

C#WindowsService は IBMLotusNotes を呼び出して電子メールを送信します

Jul 06, 2016 pm 01:30 PM
移行

最近IBM LotusMailを勉強しましたが、会社の方針によりsmtpが開かれず、多くのシステムメールが送信できないことが判明し、GoogleからLotusMailを学習し始め、それをWindowsサービスにしたいと思いました。内部アプリケーション システムに wcf サービスを提供します。システムメールなので色々な情報がGoogleで見つかりました

最近調べたIBM Lotus Mail、この製品は本当に面倒で、会社のポリシーによりオープンされていませんsmtp、多くのシステムメールが送信できないので、googleLearningLotusを始めましたメール、私はWindowsサービスを作成し、内部アプリケーションシステムにwcfサービスを提供したいと考えています。 googleで色々な情報を見つけましたが、システムメールなので設定が色々と面倒です。私も何度も落とし穴にはまったのでその記録です。さっそく始めましょう...

サーバー環境: Windows Server 2008R2+Lotus Notes 8.5中国語版

特記事項: Lotus Notes 8.5中国語版ではアカウントのパスワードを設定する必要がありますが、パスワードを開く必要はありません。

ローカル環境: Lotus Notes 8.5中国語版+Visual Studio 2013

~~~~~~~~~~~~~~~~~~~~~~~~私はエレガントなセパレータです~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~

1VSを開き、新しいクラスライブラリプロジェクトLotusMailHelperを作成し、Lotus Dominoオブジェクトを追加します。

追加後、

VS

は自動的にdllにコンパイルされます 2

、クラス

Mail.csを追加、メール送信メソッドSendMailを追加します: リーリー 3

Mail.csUsing:using Domino;を追加します。 4

SendMailのロジックを書く リーリー 最終的にはdllとしてパッケージ化されるので、try...catch...を追加して最適化すると以下のようになります。

リーリー

5. [プロジェクトの生成] をクリックし、Bin フォルダーで dll を見つけ、後で呼び出しやすいようにお気に入りのフォルダーに保存します。

============私はもっと美しいセパレーター==============

一緒にWindowsサービスを作りましょう

1. VS を開き、新しい Windows サービス プロジェクトを作成します

好きな名前を選択できます。 。 。新規作成が完了するとService1.csが自動生成されますので、Service1.csのコードを開いて確認してください。 リーリー リーリー リーリー

2. service1.cs を削除し、新しい Windows サービスを作成し、会社の必要に応じて名前を付けます。たとえば、私のものは MailService.cs です。

3. 電子メールを処理するための新しいメソッドを作成します。 リーリー

4. 電子メール モデルを構築する: ソリューションを右クリックして新しいプロジェクトを追加し、クラス ライブラリ プロジェクト MailModel を選択して、新しい MailInfo.cs を作成します

リーリー

5. 新しいクラスライブラリ DbHelper を作成し、クラス Mail.cs を追加し、その中に GetMailData() メソッド、RemoveMailData()、GetMailCount()、InsertMailData() などのメソッドを記述します。書き出すのはあまり便利ではありません。自分で追加することもできます

<span style="color: #0000ff;">public</span><span style="color: #000000;"> MailModel.MailInfo GetMailData()
{
    </span><span style="color: #008000;">//</span><span style="color: #008000;">这里写获取邮件数据</span>
    <span style="color: #0000ff;">return</span> MailInfo;<span style="color: #008000;">//</span><span style="color: #008000;">返回数据库第一封待发邮件数据</span>
<span style="color: #000000;">}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> RemoveMailData(<span style="color: #0000ff;">string</span><span style="color: #000000;"> mailId)
{
    </span><span style="color: #008000;">//</span><span style="color: #008000;">删除数据库中指定id的邮件数据</span>
<span style="color: #000000;">}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">long</span><span style="color: #000000;"> GetMailCount()
{
    </span><span style="color: #008000;">//</span><span style="color: #008000;">这里写获取邮件数量</span>
    <span style="color: #0000ff;">return</span><span style="color: #000000;"> 邮件数量
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">bool</span><span style="color: #000000;"> InsertMailData()
{
    </span><span style="color: #008000;">//</span><span style="color: #008000;">这里写插入一封邮件数据</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
}</span>
ログイン後にコピー

6,新建类库WCF项目,添加wcf,名字为SendMail

添加完成之后VS会自动生成ISendMail.cs和SendMail.cs。打开ISendMail.cs会看到如下代码

<span style="color: #008000;">//</span><span style="color: #008000;"> 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“ISendMail”。</span>
<span style="color: #000000;">[ServiceContract]
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">interface</span><span style="color: #000000;"> ISendMail
{
    [OperationContract]
    </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> DoWork();
}</span>
ログイン後にコピー

里面只有一个DoWork方法,我们新建一个ApplySendMail();注意:在顶上要添加[OperationContract]否则不会公开该函数。最后的ISendMail.cs代码如下

<span style="color: #000000;">[ServiceContract]
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">interface</span><span style="color: #000000;"> ISendMail
{
    [OperationContract]
    </span><span style="color: #0000ff;">string</span> ApplySendMail(<span style="color: #0000ff;">string</span>[] sendTo, <span style="color: #0000ff;">string</span> subject, <span style="color: #0000ff;">string</span> body, <span style="color: #0000ff;">string</span><span style="color: #000000;"> password);
}</span>
ログイン後にコピー

接着打开SendMail.cs,去实现接口的ApplySendMail()方法

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> SendMail : ISendMail
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> ApplySendMail(<span style="color: #0000ff;">string</span>[] sendTo, <span style="color: #0000ff;">string</span> subject, <span style="color: #0000ff;">string</span> body, <span style="color: #0000ff;">string</span><span style="color: #000000;"> password)
    {
        </span><span style="color: #0000ff;">string</span> result = <span style="color: #0000ff;">string</span><span style="color: #000000;">.Empty;
        </span><span style="color: #0000ff;">string</span> mailPassword = System.Configuration.ConfigurationManager.AppSettings[<span style="color: #800000;">"</span><span style="color: #800000;">password</span><span style="color: #800000;">"</span><span style="color: #000000;">];
        </span><span style="color: #0000ff;">if</span> (mailPassword ==<span style="color: #000000;"> password)
        {
            </span><span style="color: #0000ff;">try</span><span style="color: #000000;">
            {
                MailModel.MailInfo mail </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> MailModel.MailInfo
                {
                    sendTo </span>=<span style="color: #000000;"> sendTo,
                    subject </span>=<span style="color: #000000;"> subject,
                    mailBody </span>=<span style="color: #000000;"> body
                };
                </span><span style="color: #0000ff;">long</span> count =<span style="color: #000000;"> DbHelper.Mail.GetMailCount();
                </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (DbHelper.Mail.InsertMailData(mail))
                {
                    result </span>= <span style="color: #0000ff;">string</span>.Format(<span style="color: #800000;">"</span><span style="color: #800000;">提交成功.前面大約還有:{0}個任務</span><span style="color: #800000;">"</span><span style="color: #000000;">, count);
                }
                </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> result;
            }
            </span><span style="color: #0000ff;">catch</span><span style="color: #000000;">
            {
                </span><span style="color: #0000ff;">return</span> <span style="color: #800000;">"</span><span style="color: #800000;">提交失敗</span><span style="color: #800000;">"</span><span style="color: #000000;">;
            }
        }
        </span><span style="color: #0000ff;">else</span><span style="color: #000000;">
        {
            </span><span style="color: #0000ff;">return</span> <span style="color: #800000;">"</span><span style="color: #800000;">密码错误,无法提交</span><span style="color: #800000;">"</span><span style="color: #000000;">;
        }
    }
}</span>
ログイン後にコピー

至此wcf基础已经可以了,下面继续完成Windows服务那一块

7,完成处理邮件的方法SendMail(),这里要添加之前写好的LoutusMailHelper.dll

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> SendMail()
{
    </span><span style="color: #0000ff;">while</span>(<span style="color: #0000ff;">true</span><span style="color: #000000;">)
    {
        </span><span style="color: #0000ff;">var</span> mailData=<span style="color: #000000;">DbHelper.Mail.GetMailData();
        </span><span style="color: #0000ff;">if</span>(mailData!=<span style="color: #0000ff;">null</span><span style="color: #000000;">)
        {
            </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(LotusMailHelper.Mail.SendMail(mailData.sendTo,mailData.subject,mailData.mailBody))
            {
                DbHelper.Mail.RemoveMailData(mailData.mailId);
            }
            Thread.Sleep(</span><span style="color: #800080;">100</span>);<span style="color: #008000;">//</span><span style="color: #008000;">休息0.1秒</span>
<span style="color: #000000;">        }
        </span><span style="color: #0000ff;">else</span><span style="color: #000000;">
        {
            Thread.Sleep(</span><span style="color: #800080;">10000</span>);<span style="color: #008000;">//</span><span style="color: #008000;">休息10秒钟</span>
<span style="color: #000000;">        }       
    }   
}</span>
ログイン後にコピー

8,完成OnStart()逻辑:①,先添加私有成员到MailService.cs

<span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> MailService : ServiceBase
{
    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> MailService()
    {
        InitializeComponent();
    }
    </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> System.ServiceModel.ServiceHost _host;
    
    </span><span style="color: #008000;">/*</span><span style="color: #008000;">
    此处省略部分代码
    </span><span style="color: #008000;">*/</span><span style="color: #000000;">
}</span>
ログイン後にコピー

②,编写OnStart()代码

<span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">void</span> OnStart(<span style="color: #0000ff;">string</span><span style="color: #000000;">[] args)
{
    _host </span>= <span style="color: #0000ff;">new</span> System.ServiceModel.ServiceHost(<span style="color: #0000ff;">typeof</span><span style="color: #000000;">(WCF.Mail));
    _host.Open();
    </span><span style="color: #008000;">//</span><span style="color: #008000;">启动wcf服务
    
    </span><span style="color: #008000;">//</span><span style="color: #008000;">启动一个线程专门轮询发送邮件</span>
    Thread sendMail = <span style="color: #0000ff;">new</span> Thread(<span style="color: #0000ff;">new</span><span style="color: #000000;"> ThreadStart(SendMail));
    sendMail.IsBackground </span>= <span style="color: #0000ff;">true</span><span style="color: #000000;">;
    sendMail.Start();
}</span>
ログイン後にコピー

9,编写OnStop()代码,添加日志记录代码

10,配置App.config,wcf一定要配置。先看App.config中是否存在system.serviceModel节点,存在的话只需修改部分字段即可,不存在的话添加如下:

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name=<span style="color: #800000;">""</span>>
          <serviceMetadata httpGetEnabled=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> httpsGetEnabled=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> />
          <serviceDebug includeExceptionDetailInFaults=<span style="color: #800000;">"</span><span style="color: #800000;">false</span><span style="color: #800000;">"</span> />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name=<span style="color: #800000;">"</span><span style="color: #800000;">WCF.Mail</span><span style="color: #800000;">"</span>>
        <endpoint address=<span style="color: #800000;">""</span> binding=<span style="color: #800000;">"</span><span style="color: #800000;">basicHttpBinding</span><span style="color: #800000;">"</span> contract=<span style="color: #800000;">"</span><span style="color: #800000;">WCF.IMail</span><span style="color: #800000;">"</span>>
          <identity>
            <dns value=<span style="color: #800000;">"</span><span style="color: #800000;">localhost</span><span style="color: #800000;">"</span> />
          </identity>
        </endpoint>
        <endpoint address=<span style="color: #800000;">"</span><span style="color: #800000;">mex</span><span style="color: #800000;">"</span> binding=<span style="color: #800000;">"</span><span style="color: #800000;">mexHttpBinding</span><span style="color: #800000;">"</span> contract=<span style="color: #800000;">"</span><span style="color: #800000;">IMetadataExchange</span><span style="color: #800000;">"</span> />
        <!--wcf节点配置开始-->
        <host>
          <baseAddresses>
            <add baseAddress=<span style="color: #800000;">"</span><span style="color: #800000;">http://localhost:8733/MailService/Mail/</span><span style="color: #800000;">"</span> />
          </baseAddresses>
        </host>
        <!--wcf节点配置结束-->
      </service>
    </services>
  </system.serviceModel>
ログイン後にコピー

~~至此,基本的都已经完成,下面到Windows service部署

1,打开MailService.cs视图界面,添加安装程序。会自动出现如下界面:

选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem

选中serviceInstaller1组件,查看属性

设置ServiceName的值, 该值表示在系统服务中的名称

设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动

设置Description,添加服务描述

2,重新生成项目

3,打开Windows的cmd,输入C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe exe路径

等待安装。安装完毕之后打开计算机管理,查看服务,点击启动。

***删除服务:sc delete 服务名

 

至此,所有步骤都完成了,可以畅快的调用wcf来发送系统邮件了

<<<<<<<<<<<<<由于本人水平有限,可能存在很多错误,请谅解与批评指正>>>>>>>>>>>>>>

 

 百度经验 : C#创建Windows服务与安装-图解

 

推荐数据库使用nosql数据库,redis或者mongodb,在接下里的随笔里我会记录mongdb和redis的使用过程。。。第一次发文,紧张死宝宝了

 


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python を使用して Baidu Map API を呼び出し、地理的位置のクエリ機能を実装するにはどうすればよいですか? Python を使用して Baidu Map API を呼び出し、地理的位置のクエリ機能を実装するにはどうすればよいですか? Jul 31, 2023 pm 03:01 PM

Python を使用して Baidu Map API を呼び出し、地理的位置のクエリ機能を実装するにはどうすればよいですか?インターネットの発展に伴い、地理的位置情報の取得と活用はますます重要になっています。 Baidu Maps は、豊富な地理的位置クエリ サービスを提供する、非常に一般的で実用的な地図アプリケーションです。この記事では、Python を使用して Baidu Map API を呼び出し、地理的位置のクエリ機能を実装する方法を紹介し、コード例を添付します。 Baidu Map 開発者アカウントとアプリケーションの申請 まず、Baidu Map 開発者アカウントを取得し、アプリケーションを作成する必要があります。ログイン

ソースコードの探索: Python ではオブジェクトはどのように呼び出されますか? ソースコードの探索: Python ではオブジェクトはどのように呼び出されますか? May 11, 2023 am 11:46 AM

Wedge オブジェクトは主に 2 つの方法で作成されることがわかっています。1 つは Python/CAPI を使用する方法、もう 1 つは型オブジェクトを呼び出すことによる方法です。組み込み型のインスタンス オブジェクトについては、両方のメソッドがサポートされています。たとえば、リストは [] または list() を通じて作成できます。前者は Python/CAPI で、後者は呼び出し型オブジェクトです。ただし、カスタム クラスのオブジェクトの場合は、型オブジェクトを呼び出すことによってのみ作成できます。オブジェクトを呼び出すことができる場合、そのオブジェクトは呼び出し可能ですが、それ以外の場合は呼び出し可能ではありません。オブジェクトが呼び出し可能かどうかは、対応する型オブジェクトにメソッドが定義されているかどうかによって決まります。のように

PHP カメラ呼び出しスキル: マルチカメラ切り替えの実装方法 PHP カメラ呼び出しスキル: マルチカメラ切り替えの実装方法 Aug 04, 2023 pm 07:07 PM

PHP カメラ呼び出しスキル: 複数のカメラを切り替える方法 カメラ アプリケーションは、ビデオ会議、リアルタイム監視など、多くの Web アプリケーションの重要な部分になっています。 PHP では、さまざまなテクノロジーを使用してカメラを呼び出し、操作できます。この記事では、マルチカメラの切り替えを実装する方法に焦点を当て、読者の理解を深めるためにいくつかのサンプル コードを提供します。カメラ呼び出しの基本 PHP では、JavaScript API を呼び出すことでカメラを呼び出すことができます。具体的には、私たちは

PHP開発における外部リソースへのアクセスと呼び出しを解決する方法 PHP開発における外部リソースへのアクセスと呼び出しを解決する方法 Oct 08, 2023 am 11:01 AM

PHP 開発における外部リソースへのアクセスと呼び出しの問題を解決するには、特定のコード サンプルが必要です。PHP 開発では、API インターフェイス、サードパーティ ライブラリ、その他のサーバー リソースなどの外部リソースにアクセスして呼び出す必要がある状況によく遭遇します。 。これらの外部リソースを扱うときは、パフォーマンスと信頼性を確保しながら、安全にアクセスして呼び出す方法を考慮する必要があります。この記事では、いくつかの一般的な解決策について説明し、対応するコード例を示します。 1.curl ライブラリを使用して外部リソースを呼び出す Curl は、非常に強力なオープン ソース ライブラリです。

Python プログラミングで Baidu Map API を呼び出して地図表示機能を実装するにはどうすればよいですか? Python プログラミングで Baidu Map API を呼び出して地図表示機能を実装するにはどうすればよいですか? Aug 02, 2023 pm 08:27 PM

Python プログラミングで Baidu Map API を呼び出して地図表示機能を実装するにはどうすればよいですか?インターネットの急速な発展に伴い、地図アプリケーションは私たちの生活に欠かせないものになりました。百度地図は中国最大級の地図アプリケーションとして、地図表示機能を簡単に実現できる豊富なサービスとAPIインターフェースを提供しています。この記事では、Python プログラミングで Baidu Map API を呼び出して地図表示機能を実現する方法と、対応するコード例を紹介します。まず、を登録する必要があります

matlab が m ファイルを呼び出す方法-matlab で m ファイルを呼び出す方法 matlab が m ファイルを呼び出す方法-matlab で m ファイルを呼び出す方法 Mar 04, 2024 pm 01:49 PM

多くの友人はまだ matlab で m ファイルを呼び出す方法を知らないので、以下のエディターが matlab で m ファイルを呼び出す方法を説明しています。 1. 以下の図に示すように、まず matlab ソフトウェアを開き、メイン インターフェイスで [開く] をクリックします。 2. 次に、以下の図に示すように、開く必要がある m ファイルを選択し、「開く」を選択します。 3. 次に、以下の図に示すように、エディターで m ファイルのファイル名と変数の数を確認します。 4. 次の図に示すように、コマンド ラインで m ファイル名に続いて括弧内の変数値を入力すると、ファイルを呼び出すことができます。 5. 最後に、次の図に示すように、m ファイルを正常に呼び出すことができます。上記は、エディターによって提供された matlab で m ファイルを呼び出す方法の完全な説明です。

Javaを使用してWebServiceを呼び出す方法 Javaを使用してWebServiceを呼び出す方法 Dec 29, 2023 pm 02:32 PM

Java を使用して WebService を呼び出す方法の手順には、特定のコード サンプルが必要です。Web サービスは、ネットワークを介してさまざまな機能を提供する Web ベースのアプリケーション プログラム インターフェイスです。 Java 開発では、多くの場合、Web サービスを使用して他のシステムと対話する必要があります。この記事では、Java を使用して WebService を呼び出す方法と、具体的なコード例を紹介します。 1. WebService を理解する WebService は、XML 形式を使用した標準化された通信プロトコルです。

Laravel の実践: コントローラーのメソッドを正しく呼び出すには? Laravel の実践: コントローラーのメソッドを正しく呼び出すには? Mar 10, 2024 pm 01:15 PM

Laravel の実践: コントローラーのメソッドを正しく呼び出すには? Laravel フレームワークでは、コントローラーはルーティングとモデルの間の橋渡しとして機能する重要なコンポーネントです。コントローラーのメソッドは、ルーティング リクエストを処理し、処理のためにデータをモデルに渡し、ユーザーに表示するためにビューに返すために使用されます。したがって、プログラム機能を実現するには、コントローラー メソッドを正しく呼び出すことが重要です。この記事では、Laravel でコントローラー メソッドを正しく呼び出す方法と、具体的なコード例を紹介します。

See all articles