Activities of "AdamMusson"

TCheck the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.

If you're creating a bug/problem report, please include followings:

  • ABP Framework version: v7.0.1
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): no
  • Exception message and stack trace
  • 403: Forbidden:
  • Steps to reproduce the issue:"

I have configured the application to use the DomainName Tenant resolver

var mydomain = configuration["App:Domain"];
Configure<AbpTenantResolveOptions>(options =>
{
    options.AddDomainTenantResolver("{0}." + mydomain);
});

If I do it this way I have to create a new Website under IIS and setup DNS records for the subdomain for each new tenant and also purchase a new SSL Certificate for each subdomain so that it can have the Https://. Is there a better way to manage the creation and management of the tenants?
I can't find any documentation anywhere on how to configure the other TenantReolvers such as the RouteTenantResolveContributor.
How do we set up the Url for this one?

Maybe I am configuring the DOmainTenant resolver incorrectly and there is a way around having to setup the subdomain in IIS and purching a SSL certificate for each tenant. If so then can you let me know what I should be doing instead. If this is needed for the DomaiinTenantResolver can you let me know where I can find documentation on how to configure the other tenant resolvers and what the format of the Url would look like where this is applicable?

Thanks

Thanks, adding Microsoft.Extensions.FileProviders.Embedded did the trick. It works now so you can close this question and consider it answered.

Thanks for your help!

I've made those changes and redeployed the app again but I am still getting the error that it can't find the embedded files when the app is deployed. It runs fine locally.

Have you run on this on a deployed version or just locally on your machine? Because it sends me the email too when run on localhost connected to the database but as soon as I run it on the deployment server it complains about not being able to find the embedded files.

I've made the changes and uploaded them to the Github.

Hi, I have shared a demo project Github repository with you so you can see a project based on the template project illustrating the problem. The code connects to the same database that has been deployed to myasp.net and as you can see works in Debug on the local machine.

http://vfsdemo-001-site1.btempurl.com/ Is the Url you can see the code is deployed to. When you run it here and try to register the registration will fail because the ConfirmEmail template can't be found.

On localhost the code works because of the ReplaceEmbeddedAsPhysical. On the deployed version it doesn't work because the EmbeddedFiles aren't being found in the virtualfilesyste,.

Everything else is the same as both the local and deployed code are pointing to the same database. Any help in what I have done wrong here, if it isn't a bugm, would be helpful.

Let me know if you need anything else. Thanks

If you're creating a bug/problem report, please include followings:

  • ABP Framework version: v7.0.1
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): No
  • Exception message and stack trace: Could not find a file/folder at the location: /Templates/ConfirmEmail.cshtml
  • Steps to reproduce the issue: I have followed steps in articles for overriding the registermodel with a custom one that has some steps for my application's registration. The EmailTemplate for the ConfirmEmail is located in the Templates directory in the DomainModule project. The system sends the email and everything works fine locally but when it is deployed to IIS the VirtualFileSystem is not picking up the /Templates/ConfirmEmail.cshtml even though it is an embedded resource.

I have this code in the WebModule to configure the VirtualFIleSystem

 private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment)
    {
        Configure<AbpVirtualFileSystemOptions>(options =>
        {
            options.FileSets.AddEmbedded<HourcoinWebModule>();
            options.FileSets.AddEmbedded<HourcoinDomainModule>(
                 baseNamespace: "Hourcoin.Templates",
                 baseFolder: "/Templates");

            options.FileSets.AddEmbedded<RegistrationDomainModule>();
            


            if (hostingEnvironment.IsDevelopment())
            {

                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Domain.Shared", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Domain", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Application.Contracts", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinApplicationModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Application", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinHttpApiModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Hourcoin.HttpApi", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinWebModule>(hostingEnvironment.ContentRootPath);
            }
        });
    }

This works in development as the Physical File is used using the above ReplaceEmbeddedByPhysical. When deployed to IIS at myasp.net the email is not working because the template is not being rendered. I have caught the error and displayed it in the following screenshot image.

I have made sure the files in the Templates directory are Embedded Resources.

What could I be missing? Any help or suggestions would be appreciated .as i have followed all the documentation I can find and have not had any luck. I keep getting the error even after specifically ensuring the environment is Production in the web.c onfig which shouldn't be necessary. Is there a bug in the VirtualFIleSystem?

Hi, I had a working Text Templating Email with a layout using the Razor Engine in version 6.0.

Now I have updated the project to version 7.0.1 and it didn't compile due to the .withRazorEngine() line in the following code in the EmailTemplateDefinitionProvider class

 public override void Define(ITemplateDefinitionContext context)
        {
            context.Add(
               new TemplateDefinition(
                   "EmailLayout",
                   isLayout: true
               )
               .WithRazorEngine()
               .WithVirtualFilePath(
                   "/Templates/EmailLayout.cshtml",
                   isInlineLocalized: true
               )
            );


            context.Add(new TemplateDefinition("ConfirmEmail",
                                                typeof(HourcoinResource), 
                                                layout: "EmailLayout")
                                   .WithVirtualFilePath(
                                       "/Templates/ConfirmEmail.cshtml",
                                       isInlineLocalized: true
                                      
                                   )
                                  .WithRazorEngine()
            );

            
        }

To get the code to compile I had to remove the .WithRazorEngine() line

I thought there may have been an update and so following the TextTemplating documentation for version 7 I used the following command abp add-package Volo.Abp.TextTemplating.Razor and got the following message.

[13:03:04 WRN] 'Volo.Abp.TextTemplating.Razor' nuget package could not be found!

So now I receive the email but instead of it being rendered I see the @Body from the EmailLayout instead of the contents from the model.

It appears the documentation is therefore out of date. How can I get this to work in version 7? Has it moved to another package?

Kind Regards

  • ABP Framework version: v7.0.1
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): no

No Exception the email is sent but it isn't rendered by the razor engine as it doesn't seem to be there anymore.

  • Steps to reproduce the issue:"

I think there is a bug in the CmsKit in that you can't override the model and view as you should be able to do under the normal Abp principles. The OnGet method in the base class cannot be overriden.

How can I solve this as I do not have access to the source code to completely write my own handler by copying everything in the base class and building it up from there?

  • ABP Framework version: v6.0.0-rc.4
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): no
  • Exception message and stack trace:

InvalidOperationException: Multiple handlers matched. The following handlers matched route data and had all constraints satisfied: Void OnGetAsync(), System.Threading.Tasks.Task OnGetAsync()

  • Steps to reproduce the issue:"
    1. Create a view Index.cshtml in a folder ~Pages/Public/CmsKit/Blogs/ in the Public Website project - this is to override that view
    1. Create a model BlogIndexModel that inherits from **Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs.IndexModel ** This works according to the naming conventions.
    1. Try to create an OnGet or OnGetAsync method so that you can setup the model for your overridden Blogs Page. For example

public BlogPostPublicDto LatestPost { get; set; } public void OnGetAsync() { base.OnGetAsync(); LatestPost = base.Blogs.Items.OrderByDescending(d => d.CreationTime).Take(1).First();

}

This compiles but throws the exception because of the OnGet handler in the base class.

public new void OnGetAsync() to hide the base class implementation also compiles but still get the same Exception as multiple handlers match when you run it.

The fix would normally be to override the method. I've done this with other pages but it doesn't work here.

public override void OnGetAsync() { }

But this doesn't compile as the OnGet method in the base class has not been marked virtual and cannot be overridden. Any help to sort this out would be appreciated.

Thanks - that's great. I noticed you have checked this into the Abp MailKitSmtpEmailSender too now. Will this be included in the version 6.0 final release? Or will it be sometime later that we will no longer need to do this override ourselves?

Thanks a lot.

Hi, Are you saying that in an ABP application we are forced to use the Google SMTP server? And therefore create a gmail email address for the sending of emails from the application.

I am sending email from the 123-reg SMTP server and so I am not using the Google SMTP server. The problem is that because we can't set the MessageId using the ABP IEmailSender the Gmail Spam filters prevent emails from being delivered to Gmail addresses meaning people with Gmail accounts can't register for the application and confirm their emails.

If we could set the MessageId in the email header we could send email from any SMTP server and they would pass through the spam filter used by Gmail. It seems to me that if the ABP email sending service added this header the issue would be fixed.

The emails are sent successfully to email accounts that don't check the messageId for spam with my current setup.

When I deploy the application to a docker container on azure I find that emails to gmail accounts are not accepted. I have created an email with 123-reg server and am using this to send out the emails on user registration.

The email gets sent successfully to many email accounts I have but is rejected by all the gmail accounts I have tested. The response is below. How can we set the MessageId in abp?

Any help would be appreciated as I need to allow users with gmail addresses to be able to register.

FYI, The message id header is not required currently, but is used by several spam filters including gmail. As for what it needs to be set to, something unique.

  • ABP Framework version: v6.0.0-rc1
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): no
  • Exception message and stack trace:none but here is the response from gmail when sending the email This is an automatically generated Delivery Status Notification.

Reason: There was an error while attempting to deliver your message with [Subject: "Please Confirm your email"] to adam.musson@gmail.com. MTA p3plwbeout16-03.prod.phx3.secureserver.net received this response from the destination host IP - 142.250.141.27 - 550 , 550-5.7.1 [173.201.193.58] Messages missing a valid messageId header are not 550 5.7.1 accepted. lb10-20020a17090b4a4a00b00200b96d234csi12474831pjb.49 - gsmtp

  • Steps to reproduce the issue:" Deploy the application to docker and try and register to get a confirmation email
Showing 1 to 10 of 13 entries
Made with ❤️ on ABP v8.2.0-preview Updated on March 25, 2024, 15:11