mirror of https://github.com/abpframework/abp.git
committed by
GitHub
2 changed files with 114 additions and 2 deletions
@ -1,3 +1,111 @@ |
|||
# Emailing |
|||
# SMS Sending |
|||
|
|||
TODO! |
|||
The ABP Framework provides an abstraction to sending SMS. Having such an abstraction has some benefits; |
|||
|
|||
- You can then **easily change** your SMS sender without changing your application code. |
|||
- If you want to create **reusable application modules**, you don't need to make assumption about how the SMS are sent. |
|||
|
|||
## Installation |
|||
|
|||
It is suggested to use the [ABP CLI](CLI.md) to install this package. |
|||
|
|||
### Using the ABP CLI |
|||
|
|||
Open a command line window in the folder of the project (.csproj file) and type the following command: |
|||
|
|||
```bash |
|||
abp add-package Volo.Abp.Sms |
|||
``` |
|||
|
|||
### Manual Installation |
|||
|
|||
If you want to manually install; |
|||
|
|||
1. Add the [Volo.Abp.Sms](https://www.nuget.org/packages/Volo.Abp.Sms) NuGet package to your project: |
|||
|
|||
``` |
|||
Install-Package Volo.Abp.Sms |
|||
``` |
|||
|
|||
2. Add the `AbpSmsModule` to the dependency list of your module: |
|||
|
|||
```csharp |
|||
[DependsOn( |
|||
//...other dependencies |
|||
typeof(AbpSmsModule) //Add the new module dependency |
|||
)] |
|||
public class YourModule : AbpModule |
|||
{ |
|||
} |
|||
``` |
|||
|
|||
## Sending SMS |
|||
|
|||
[Inject](Dependency-Injection.md) the `ISmsSender` into any service and use the `SendAsync` method to send a SMS. |
|||
|
|||
**Example:** |
|||
|
|||
```csharp |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Sms; |
|||
|
|||
namespace MyProject |
|||
{ |
|||
public class MyService : ITransientDependency |
|||
{ |
|||
private readonly ISmsSender _smsSender; |
|||
|
|||
public MyService(ISmsSender smsSender) |
|||
{ |
|||
_smsSender = smsSender; |
|||
} |
|||
|
|||
public async Task DoItAsync() |
|||
{ |
|||
await _smsSender.SendAsync( |
|||
"+012345678901", // target phone number |
|||
"This is test sms..." // message text |
|||
); |
|||
} |
|||
} |
|||
} |
|||
``` |
|||
|
|||
The given `SendAsync` method in the example is an extension method to send an SMS with primitive parameters. In addition, you can pass an `SmsMessage` object which has the following properties: |
|||
|
|||
- `PhoneNumber` (`string`): Target phone number |
|||
- `Text` (`string`): Message text |
|||
- `Properties` (`Dictionary<string, string>`): Key-value pairs to pass custom arguments |
|||
|
|||
## NullSmsSender |
|||
|
|||
`NullSmsSender` is a the default implementation of the `ISmsSender`. It writes SMS content to the [standard logler](Logging.md), rather than actually sending the SMS. |
|||
|
|||
This class can be useful especially in development time where you generally don't want to send real SMS. **However, if you want to actually send SMS, you should implement the `IsSmsSender` in your application code.** |
|||
|
|||
## Implementing the ISmsSender |
|||
|
|||
You can easily create your SMS sending implementation by creating a class that implements the `ISmsSender` interface, as shown below: |
|||
|
|||
```csharp |
|||
using System.IO; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Sms; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace AbpDemo |
|||
{ |
|||
public class MyCustomSmsSender : ISmsSender, ITransientDependency |
|||
{ |
|||
public async Task SendAsync(SmsMessage smsMessage) |
|||
{ |
|||
// Send sms |
|||
} |
|||
} |
|||
} |
|||
``` |
|||
|
|||
## More |
|||
|
|||
[ABP Commercial](https://commercial.abp.io/) provides Twilio integration package to send SMS over [Twilio service](https://docs.abp.io/en/commercial/latest/modules/twilio-sms). |
|||
Loading…
Reference in new issue