Hi Ted,
I am doing this if I want different settings from the application properties:
ERJavaMail jm = ERJavaMail.sharedInstance(); Properties props = jm.defaultSession().getProperties(); props.put("mail.smtp.host", smtpHost); props.put("mail.smtp.auth", smtpAuth); props.put("mail.smtp.user", smtpUser); props.put("mail.smtp.password", smtpPassword); Session session = jm.newSession(props); ERMailDeliveryPlainText mail = new ERMailDeliveryPlainText(session); ...
jw
Am 29.10.2011 um 00:35 schrieb Theodore Petrosky: but how do you handle the situation where you don't know the smtp server, or the smtp server is changing? I want to store the smtp server (and port) as an attribute in my database then I can adjust it as needed. Am I thinking about this 'wrong'? TEd ----------------------------------------------------------------------
Message: 1
Date: Tue, 25 Oct 2011 00:34:43 +0200
From: Philippe Rabier <email@hidden>
Subject: Re: setting properties ??
To: WebObjects Development <email@hidden>
Message-ID: <email@hidden">email@hidden>
Content-Type: text/plain; CHARSET=US-ASCII
Theodore, I'm afraid you use properties the wrong way.
Personally, I never set properties in my own code, only
read them (except for frameworks I wrote of course).
Properties are used to initialize informations.
By setting default values in your framework, you can change
them in your application. And you can have several
properties files in your have with a different suffix
(Properties.staging, Properties.production for example).
Then you can set a user through the WOMonitor in the
additional arguments like -Duser.name=staging and the right
file will be opened.
I hope you read the wiki because there are useful
informations like http://wiki.objectstyle.org/confluence/display/WO/Project+Wonder+Properties+Files
Now if you want to modify on the fly ERJavaMail, use the
accessors like setCentralize(boolean) for example because
properties can be read once during initialization. If you
don't find an accessor, maybe you can't change it. I
wouldn't be surprised if the smtp host is one of them.
Philippe
On 24 oct. 2011, at 16:39, Theodore Petrosky wrote:
--- On Sun, 10/23/11, Kieran Kelleher <email@hidden>
wrote:
From: Kieran Kelleher <email@hidden>
Subject: Re: setting properties ??
To: "Theodore Petrosky" <email@hidden>
Cc: email@hidden
Date: Sunday, October 23, 2011, 10:42 PM
You can specify the properties in
your Properties file (inside Resources folder in
your
project), for example:
er.javamail.centralize=false
what I am discovering is that there are some
ERJavaMail attributes that can be adjusted on the fly.
centralize is not one of them.
I have a little dummy app for testing and after I put
the er.javamail.centralize=false in the Properties file, I
can put:
ERXProperties.setStringForKey("mail.agencysacks.com",
"mail.smtp.host");
in my component and it will use this mail server.
however if it is commented out, it will not find a mail
server and the sending will fail.
Now I will experiment to discover what other
attributes MUST be in the Properties file and which can be
adjusted on the fly.
Ted
On Oct 23, 2011, at 7:34 AM, Theodore Petrosky
wrote:
I am working with sending email notifications
when my
users save edits to EOs.
I discovered that I can update the properties
from my
app (in the application constructor) with:
ERXProperties.setStringForKey("mail.agencysacks.com",
"mail.smtp.host");
ERXProperties.setStringForKey("35",
"mail.smtp.port");
ERXProperties.setStringForKey("false",
"er.javamail.centralize");
ERXProperties.setStringForKey("tpetrosky",
"er.javamail.smtpUser");
ERXProperties.setStringForKey("xxxx",
"er.javamail.smtpPassword");
ERXProperties.setStringForKey("true",
"er.javamail.smtpAuth");
ERXProperties.setStringForKey("email@hidden",
"er.javamail.adminEmail");
so (as I am just playing because I need to
learn more)
I added some log statements in my save method:
public WOActionResults saveChangesToItem() {
. . . . .
ERMailDeliveryHTML mail = new
ERMailDeliveryHTML ();
IOChangeEmail component =
pageWithName(IOChangeEmail.class);
mail.setComponent(component);
System.out.println("inside try mail.smtp.host
= " +
ERXProperties.stringForKey("mail.smtp.host"));
System.out.println("inside try mail.smtp.port
= " +
ERXProperties.stringForKey("mail.smtp.port"));
System.out.println("inside try
er.javamail.centralize
= " +
ERXProperties.stringForKey("er.javamail.centralize"));
System.out.println("inside try
er.javamail.adminEmail
= " +
ERXProperties.stringForKey("er.javamail.adminEmail"));
mail.newMail();
mail.setToAddress("email@hidden",
"Theodore Petrosky");
mail.setFromAddress("email@hidden",
"Ted Petrosky");
mail.setReplyToAddress("email@hidden",
"Ted Petrosky");
mail.setSubject("An IO was edited and
saved!!");
mail.sendMail();
. . . .
}
this is the console:
Oct 23 02:27:06 ASChelseaLoginGrid[56901]
DEBUG
NSLog - === Commit Internal
Transaction
inside try mail.smtp.host =
mail.agencysacks.com
inside try mail.smtp.port = 35
inside try er.javamail.centralize = false
inside try er.javamail.adminEmail = email@hidden
Oct 23 02:27:09 ASChelseaLoginGrid[56901]
DEBUG
NSLog - === Begin Internal
Transaction
er.javamail.centralize was set to false in
the
application constructor. However it was ignored
and when I
looked at the logs in the mail server I see that
the
toAddress was "email@hidden".
which was odd as I was setting the adminEmail
in the
application constructor also.
After experimenting I find that these two
properties
do not 'stick' even though my log statements claim
that the
values are correct.
ERXProperties.setStringForKey("false",
"er.javamail.centralize");
ERXProperties.setStringForKey("email@hidden",
"er.javamail.adminEmail");
bottom line, I got things to work, just not as
I
expected. Is this correct? Should I be adjusting
the
properties in the application constructor? If not,
then
where. Or maybe the better question is, "Is there
a better
way to do this?"
Ted
|