How to configure osgi config xml under config folder programatically? | Community
Skip to main content
Level 3
Jun 30, 2019 12:44 PM UTC
Solved

How to configure osgi config xml under config folder programatically?

Hi,

I have a requirement to set osgi config properties @programatically. For instance i have created a xml file under config file(email service) with below values

<?xml version="1.0" encoding="UTF-8"?>

<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"

    jcr:primaryType="sling:OsgiConfig"

    debug.email="{Boolean}true"

    from.address=""

    smtp.host="smtp.gmail.com"

    smtp.password="password"

    smtp.port="465"

    smtp.ssl="{Boolean}true"

    smtp.user="mymail@gmail.com"/>

Arun Patidar​Joerg Hoh​smacdonald2008​

I wasnt to set all these values programatically

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
arunpatidar
arunpatidarAccepted solution
New Participant
Jul 1, 2019 1:14 PM UTC

I tried with as MessageGatewayService well, it is taking from address from osgi config but Name is working.

e.g.

email.setFrom("abcd.efg@gmail.com", "Arun Patidar");

aem63app-repo/HTMLEmailServlet.java at master · arunpatidar02/aem63app-repo · GitHub

I am not sure, if there is any other configuration to work above but if you really want to go with config update then you can use below  code :

-------------------------------------------------------------

Configuration configuration = configAdmin.getConfiguration("com.day.cq.mailer.DefaultMailService");

if (configuration != null) {

// get properties

Dictionary<String, Object> properties = configuration.getProperties();

Dictionary<String, Object> newProperties = properties;

// update properties

        if (properties == null) {

        newProperties = new Hashtable<String, Object>();

        }

       

        newProperties.put("smtp.user", "new user");

        newProperties.put("smtp.password","new pass");

        newProperties.put("from.address", "new from");

configuration.update(newProperties);

// send mail

// revert to old property

configuration.update(properties);

}

Arun Patidar

13 replies

tahir1601Author
Level 3
Jul 2, 2019 3:50 AM UTC

I am actually using acs common email service

Translate
tahir1601Author
Level 3
Jul 2, 2019 3:50 AM UTC

yeah will try them out

Translate
tahir1601Author
Level 3
Jul 2, 2019 3:50 AM UTC

thanks Arun, I'll try this out

Translate
joerghoh
Employee
Jul 1, 2019 7:11 PM UTC

These properties are system-wide settings. They are not supposed to be changed by a user, but are persistent defaults. If you need to change the source address of an email generated by AEM you can use the methods described by the other responses. But you should never change OSGI configurations with input provided a user.

Jörg

Translate
arunpatidar
arunpatidarAccepted solution
New Participant
Jul 1, 2019 1:14 PM UTC

I tried with as MessageGatewayService well, it is taking from address from osgi config but Name is working.

e.g.

email.setFrom("abcd.efg@gmail.com", "Arun Patidar");

aem63app-repo/HTMLEmailServlet.java at master · arunpatidar02/aem63app-repo · GitHub

I am not sure, if there is any other configuration to work above but if you really want to go with config update then you can use below  code :

-------------------------------------------------------------

Configuration configuration = configAdmin.getConfiguration("com.day.cq.mailer.DefaultMailService");

if (configuration != null) {

// get properties

Dictionary<String, Object> properties = configuration.getProperties();

Dictionary<String, Object> newProperties = properties;

// update properties

        if (properties == null) {

        newProperties = new Hashtable<String, Object>();

        }

       

        newProperties.put("smtp.user", "new user");

        newProperties.put("smtp.password","new pass");

        newProperties.put("from.address", "new from");

configuration.update(newProperties);

// send mail

// revert to old property

configuration.update(properties);

}

Translate
Arun Patidar
tahir1601Author
Level 3
Jul 1, 2019 12:37 PM UTC

I tried this way but the sender mail is getting picked up from osgi config property 'smtp.user'

Translate
antoniom5495929
Level 7
Jul 1, 2019 11:26 AM UTC

Hi,

do you think is it possible for you to use an other approach?

E.g. I think that you could use the MailService with the default file configuration and use API in order to change the sender based on the dialog configuration.

Have a look on the following snippet:

String mydialogSender = getDialogSender();

  Email mail = new HtmlEmail();

  mail = mail.setFrom(mydialogSender);

mail.setCharset("UTF-8");

mail.setSubject(mailSubject);

mail.addTo(emailTo);

mail.setMsg( mailPattern );

mailService.send(mail);

Let us know.

Thanks,

Antonio

Translate
arunpatidar
New Participant
Jul 1, 2019 10:52 AM UTC

You can set sender info from code by adding keys in map like below as you are using ACS Common.

No need to update osgi config

emailParams.put("senderEmailAddress","abcd@example.com");

emailParams.put("senderName","David Smith");

More info

Email API

Translate
Arun Patidar
tahir1601Author
Level 3
Jul 1, 2019 4:00 AM UTC

author should be able to configure the from address from name in the email. These should be coming from component dialog

Translate
tahir1601Author
Level 3
Jul 1, 2019 3:59 AM UTC

i want the from.email or smtp.user to be coming from dialog.

Translate