Additional alert emails not working - email

i would like to send the notification (or alert) email to additional addresses.
thats what i did:
/index.php?route=setting/setting
Tab "Email"
Add additional emails (comma seperated)
i found a lot of topics about exactly this problem. but the solution always was to change protocol from SMTP to mail(). in my case that's not an option. dose some one know how to get to send the alerts to multiple addresses?
thank you...

Save the following [VQMOD] Bug fix: "Additional Alert Email" field not sending email issue in Opencart v.2.3.0.2 as knns_bug_fix_additional_alert_mail_field_not_sending_email_issue_v2302.xml and upload it to /vqmod/xml/ folder
<?xml version="1.0" encoding="UTF-8"?>
<modification
xmlns="https://github.com/vqmod/vqmod"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://github.com/vqmod/vqmod https://raw.githubusercontent.com/vqmod/vqmod/master/vqmod.xsd">
>
<id><![CDATA[[VQMOD] Bug fix: "Additional Alert Email" field not sending email issue in Opencart v.2.3.0.2]]></id>
<version>0.1.0</version>
<vqmver>2.6.3</vqmver>
<author>kanenas.net (aka Nikolas Branis) - nbran#kanenas.net</author>
<file path="admin/view/template/setting/" name="setting.tpl" error="log">
<operation error="skip">
<search position="replace"><![CDATA[<textarea name="config_mail_alert_email" rows="5" placeholder="<?php echo $entry_mail_alert_email; ?>" id="input-alert-email" class="form-control"><?php echo $config_alert_email; ?></textarea>]]></search>
<add><![CDATA[
<textarea name="config_alert_email" rows="5" placeholder="<?php echo $entry_mail_alert_email; ?>" id="input-alert-email" class="form-control"><?php echo $config_alert_email; ?></textarea>
]]></add>
</operation>
</file>
</modification>
Note: vQmod is required!

Related

PHP7: Form Entries submitting with $_POST doesn't work - $_GET is ok

I am new to Stackoverflow, but I already have a simple problem where I need your help.
I have a simple form, where the user has to submit his first and last name:
<form action="u_eingabe.php" method="post"> <!--enctype="application/x-www-form-urlencoded"-->
<p>First name: <input name="firstname" id="vor"/></p>
<p>Last name: <input name="lastname" id="nach"/></p>
<p><input type="submit" /></p>
The u_eingabe.php contains the following simple code for getting the first and last name:
<?php
echo "Ihre Adresse lautet:" . "<br />";
echo $_POST['firstname'] . " " . $_POST['lastname'] . "<br />";
?>
On PHP5 there is no problem. It just transmits and displays the data. But on PHP 7.0.3 it doesn't show anything and throws the warnings, that the indexes are empty. (Notice: Undefined index: firstname)
The interesting thing is: if i switch to GET as method, everything is fine and it submits and displays the first and last name.
So has everything changed due to PHP7 for post method? Google didn't help out for this problem.
As i mentioned above, it works fine with php5. I didn't mention I use PHPStorm 10.0.3. I continued searching with google and found this:
https://intellij-support.jetbrains.com/hc/en-us/community/posts/206999125-PhPStorm-10-does-not-allow-POST-method
It seems to be an issue in PHPStorm 10.0.2 and higher that POST-Requests are empty in the phpstorm built-in webserver.

Unable to Add/Modify Mobile Phone field using IPP against QuickBooks desktop

I can't seem to modify or add the Mobile phone field in QuickBooks for QB Desktop. Online works fine, no dice in desktop but according to the XML response of the MOD request it seems to be working fine.
It shows the field being created/modified (idDomain is created, id value generated) however SyncManager never pushes the changes to QuickBooks.
I can modify the Mobile value on the QB side and I'll be able to see that change in my IPP application but no go when heading the other direction.
Here's the XML traces:
http://pastebin.com/qprwAh9z
Any ideas?
I was able to replicate this. The mobile phone number does not sync to the QB desktop file.Seems like a bug.
Please submit a support ticket here:
Link - http://developer.intuit.com/Support/Incident
It looks like, the problem is when you use 'Mobile' in the Phone's 'Tag' field.
Instead of 'Mobile', I tried 'Home' in the Tag field. As an alternate solution you can try the following (I will take a look if there is any constraint in the intermediate QBXML/QBSDK side )
IDS Req
<?xml version="1.0" encoding="UTF-8"?>
<Add xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" RequestId="22f39648c5ab1111988854e808163dc9" xmlns="http://www.intuit.com/sb/cdm/v2">
<ExternalRealmId>657117515</ExternalRealmId>
<Object xsi:type="Customer">
<TypeOf>Person</TypeOf>
<Name>SampleCust-IDS12</Name>
<Address>
...
</Address>
<Address>
...
</Address>
<Phone>
<DeviceType>LandLine</DeviceType>
<FreeFormNumber>0123456789</FreeFormNumber>
<Default>1</Default>
<Tag>Business</Tag>
</Phone>
<Phone>
<DeviceType>LandLine</DeviceType>
<FreeFormNumber>1234567890</FreeFormNumber>
<Default>0</Default>
<Tag>Home</Tag>
</Phone>
...
</Object>
</Add>
Create Response
<RestResponse xmlns="http://www.intuit.com/sb/cdm/v2">
<Success RequestId="22f39648c5ab1111988854e808163dc9">
<PartyRoleRef>
<Id idDomain="NG">1221097</Id>
<SyncToken>1</SyncToken>
<LastUpdatedTime>2013-07-19T11:25:43Z</LastUpdatedTime>
<PartyReferenceId idDomain="NG">1261065</PartyReferenceId>
</PartyRoleRef>
<RequestName>CustomerAdd</RequestName>
<ProcessedTime>2013-07-19T11:25:43Z</ProcessedTime>
</Success>
</RestResponse>
QBXML [ 2nd phone no is coming under AltPhone tag ]
<?qbxml version="9.0" ?>
<QBXML>
<QBXMLMsgsRq onError="continueOnError" newMessageSetID="13ff6ae6e2c76b59e49">
<CustomerAddRq requestID="EsbKeyMapHeader:1221097:0">
<CustomerAdd>
<Name>SampleCust-IDS12</Name>
..
<BillAddress>
...
</BillAddress>
<ShipAddress>
...
</ShipAddress>
<PrintAs>SampleCust</PrintAs>
<Phone>0123456789</Phone>
<AltPhone>1234567890</AltPhone>
<Fax></Fax>
..
</CustomerAddRq>
</QBXMLMsgsRq>
</QBXML>
QB's view [ There is no specific field for Mobile. Mobile/LandLine is kindOf Metadata. I'll check and confirm this behaviour ]
Thanks

PayPal Payment Advanced User authentication failed

I am working on a site that's using PayPal Payment Advanced.
I've went through the documentation and have tried several methods for getting the initial token.
Below is my code:
Dim collection As New NameValueCollection()
collection.Add("PARTNER", "PayPal")
collection.Add("VENDOR", "*Vendor ID*")
collection.Add("USER", "*Transaction ID*")
collection.Add("PASSWORD", "*The USER Password*")
collection.Add("TRXTYPE", "S")
collection.Add("AMT", "0.01")
collection.Add("CREATESECURETOKEN", "Y")
collection.Add("SECURETOKENID", Guid.NewGuid().ToString().Replace("-", ""))
Dim wc As New WebClient()
Dim response As Byte() = wc.UploadValues("https://pilot-payflowpro.paypal.com", "POST", collection)
Dim text As String = ASCIIEncoding.ASCII.GetString(response)
The result is always
something like.....
RESULT=1&SECURETOKENID=11d95bb67d924cb2b8d9b4df81dfd586&RESPMSG=User authentication failed
I've tried this basic process using a simple html form with post and hidden form fields with key value pairs the result is always the same.
I can access both accounts in PayPal Manger with no issues.
Any help from anyone out there would be greatly appreciated.
I found the issue, I am posting here in the hopes that someone else won't have to go through the same headache as myself.
When attempting to submit test data for PayPal payment advanced you'll need to ensure that you do have a sandbox account email associated and tied to the PayPal manager. I created a fictitious email because my actual email was already associated with another account.
So be sure to go to developer.paypal.com and select "Sandbox Accounts" --> Create Account.
After you've created the account, in the Sandbox test accounts select the new entry and select "Profile" under the Profile tab ensure PayPal Payments Pro is selected.
Now, off to PayPal manager. From here you'll want to be sure the PayPal Sandbox email address is associated. With the new account added in the developer sandbox enter the email address and select update.
Under transaction settings ensure that you have a value in "Maximum Amount per Transaction"
Lastly ensure the name value parameters are set properly. In my case it was failing on the parameter PASSWORD. It should have been PWD.
So your form should be set as in the following example.
<form method="POST" action="https://pilot-payflowpro.paypal.com:443" target="paypal">
<input type="hidden" value="PARTNER" name="PayPal" />
<input type="hidden" value="VENDOR" name="*Vendor Name*" />
<input type="hidden" value="USER" name="*User Name*" />
<input type="hidden" value="PWD" name=""User Password"" />
<!-- NOT PASSWORD -->
<input type="hidden" value="CREATESECURETOKEN" name="Y" />
<input type="hidden" value="TRXTYPE" name="S" />
<input type="hidden" value="AMT" name="1.01" />
<input type="hidden" value="SECURETOKENID" name="random guid here" />
<input type="submit" value="Submit">
</form>
Or
Dim collection As New NameValueCollection()
collection.Add("Partner", "Partner Name - Usually PayPal or Verisign")
collection.Add("Vendor", "Vendor Name")
collection.Add("User", "User Name")
collection.Add("PWD", "User's Password")
collection.Add("TRXTYPE", "Transaction type, example A, S, etc")
collection.Add("AMT", "Amount")
collection.Add("CREATESECURETOKEN", "Y")
collection.Add("SECURETOKENID", Guid.NewGuid().ToString().Replace("-", ""))
Dim wc As New WebClient()
Dim response As Byte() = wc.UploadValues(txtWebAddress.Text, "POST", collection)
wc.Dispose()
Dim responsetext As String = System.Text.ASCIIEncoding.ASCII.GetString(response)
I would like to thank PayPal support for their help in resolving this issue. They were most helpful.
To note, from the Paypal Knowledgebase site,
Note: Although PayPal Manager allows special characters to be part of the password, avoid using them because some operating shells like DOS or UNIX treat them differently. For example, the percent sign (%) is a special character within DOS. A password such as "PaSS%word1" will truncate to "PaSS" because DOS will drop all the characters after the second "S".
I had a password containing a non alpha-numeric character, and authentication would fail in same way as OP.
https://www.paypal-knowledge.com/infocenter/index?page=content&id=FAQ1223&actp=LIST
Are you using the API credentials? or the USER credentials?
Give a look to: https://developer.paypal.com/webapps/developer/docs/classic/express-checkout/integration-guide/ECAPICredentials/

How long does CFmail take to send?

I am making an app that creates a custom PDF, mails it and then deletes it. I have tested all 3 components separately and they work but when I put them together the email doesn't send.
Is it possible that the attachment gets deleted before the email is sent even though the delete is after it in the script?
Here is my code.
<!---Get the PDF--->
<cfscript>
PDFBuilder = createobject("component", "form_admin.email.PDFBuilder" );
pdf = PDFBuilder.createPDF(form_id);
</cfscript>
<!---Create link to the pdf --->
<cfscript>
foo = expandPath('../email/tmp/') & pdf & '.pdf';
</cfscript>
<!---Create email--->
<cfmail to="will#hazardousfrog.com"
from="will#hazardoufrog.com"
subject="Jag intrest form. "
type="text/html" >
<cfmailparam file="#foo#">
Dear #getEmail.title#, #getEmail.first_name# #getEmail.surname# <br />
Attached is a PDF boucher telling you more information about the cars you were interested in. <br />
Best wishes <br />
Jaguar <br /><br /><br /><br /><br /><br /><br /><br />
This is not actually jaguar this is a test application by Hazardousfrog.
</cfmail>
<!---Delete the file after it has been sent --->
<cfif FileExists(#foo#)>
<cffile action="delete"
file="#foo#">
<cfelse>
<cfoutput >
error
</cfoutput>
<cfabort>
</cfif>
Sorry if the code isn't great I have only been doing CF for like 2 weeks.
Ok I managed to get the answer from a work friend.
When cfmail is processed the mail is saved into a spool and periodically sent out after about 3 mins.
In my case it meant that the email PDF attachment was being deleted before the message could be sent so the mail was not sending.
The coldFusion mail tag has an attribute to send it straight away or keep it spooled.
spoolenable : Whether to spool mail or always send it Immediately.
So to get it to get my code to work I added this line to my mail attributes.
spoolenable="false"
One other option would be to use the remove attribute of the cfmailparam tag which will tell CF to remove the file after it is sent. This way your spoolenable attribute can be true and it should work as desired. The remove attribute was introduced in version 8.0.1.
I would also place a fileExists() around the cfmail code on whether the pdf file indeed has been created.

Custom forms in Magento

Can anyone provide a dummy guide \ code snippets on how to create a front end form in Magento that posts data to a controller action.
Im trying to write a variant of the contact us from. (I know its easy to modify the contact us form, as outlined here). I'm trying to also create a feedback form with additional fields.
Given this basic form:
<form action="<?php echo $this->getFormAction(); ?>" id="feedbackForm" method="post">
<div class="input-box">
<label for="name"><?php echo Mage::helper('contacts')->__('Name') ?> <span class="required">*</span></label><br />
<input name="name" id="name" title="<?php echo Mage::helper('contacts')->__('Name') ?>" value="<?php echo $this->htmlEscape($this->helper('contacts')->getUserName()) ?>" class="required-entry input-text" type="text" />
</div>
<div class="button-set">
<p class="required"><?php echo Mage::helper('contacts')->__('* Required Fields') ?></p>
<button class="form-button" type="submit"><span><?php echo Mage::helper('contacts')->__('Submit') ?></span></button>
</div>
</form>
What are the basic step I need to take to get inputted name to a controller action for processing?
If any one is interested, I solved this by building my own module which was heavily based on the Magento_Contacts module.
Here are some links that helped me figure things out.
http://www.magentocommerce.com/wiki/custom_module_with_custom_database_table
http://inchoo.net/ecommerce/magento/magento-custom-emails/
To make $this->getFormAction() return the URL to your custom controller, you have two options:
call setFormAction() somewhere else on the block.
use a custom block type that implements getFormAction().
(1) is what happens in Mage_Contacts_IndexController::indexAction(), but (2) is the cleaner approach and I'm going to explain it in detail:
Create a custom module
app/etc/modules/Stack_Form.xml:
<?xml version="1.0"?>
<config>
<modules>
<Stack_Form>
<active>true</active>
<codePool>local</codePool>
</Stack_Form>
</modules>
</config>
app/code/local/Stack/Form/etc/config.xml:
<?xml version="1.0"?>
<config>
<modules>
<Stack_Form>
<version>0.1.0</version>
</Stack_Form>
</modules>
<frontend>
<routers>
<stack_form>
<use>standard</use>
<args>
<module>Stack_Form</module>
<frontName>feedback</frontName>
</args>
</stack_form>
</routers>
</frontend>
<global>
<blocks>
<stack_form>
<class>Stack_Form_Block</class>
</stack_form>
</blocks>
</global>
</config>
This configuration registers the stack_form block alias for own blocks and the feedback front name for own controllers.
Create custom block
app/code/local/Stack/Form/Block/Form.php
class Stack_Form_Block_Form extends Mage_Core_Block_Template
{
public function getFormAction()
{
return $this->getUrl('stack_form/index/post`);
}
}
Here we implemented getFormAction() to generate the URL for our custom controller (the result will be BASE_URL/feedback/index/post).
Create custom controller
app/code/local/Stack/Form/controllers/IndexController.php
class Stack_Form_IndexController extends Mage_Contacts_IndexController
{
public function postAction()
{
// your custom post action
}
}
If the form should behave exactly like the contact form, just with a different email template and additional form fields, there are two solutions that I have outlined at https://magento.stackexchange.com/q/79602/243 where only one of them actually requires a custom controller action to send the form:
If you look at the contacts
controller
used in the form action, you will find that
the transactional template is taken directly from the configuration
all POST data is passed to the template (as template variable data), so that you can add any additional fields to the form
template and use them in the email template. But validation is hard
coded for "name", "comment", "email" and "hideit".
So, if you need a completely different email template or
additional/changed input validation, your best bet is to create a
custom controller with a modified copy of the postAction of
Mage_Contacts_IndexController.
But there is another solution that is a bit limited but without any
custom code involved:
create a hidden input that determines the type of the form. It could be just <input type="hidden" name="custom" value="1" />.
in the contact transactional email template, use the if directive to show different content based on the form type:
{{if data.custom}}
... custom contact form email ...
{{else}}
... standard contact form email ...
{{/if}}
How to use this custom block
You can add the form anywhere in the CMS using this code (CMS directive):
{{block type="stack_form/form" template="path/to/your/form.phtml"}}
If you do this, you need to add "stack_form/form" to the block whitelist under System > Permissions > Blocks!
Or in the layout using this code (layout XML):
<block type="stack_form/form" name="any_unique_name" template="path/to/your/form.phtml" />
Solution without custom module
If you use the solution without custom controller and a single email template mentioned above, you can set the form action using layout XML as well.
To achieve this, we use the feature to call helpers as parameters for block actions. Unfortunately, the core helper does not have a public method to get a URL but the helper from Mage_XmlConnect has, so you can use that one:
<block type="core/template" name="any_unique_name" template="path/to/your/form.phtml">
<action method="setFormAction">
<param helper="xmlconnect/getUrl">
<route>contacts/index/post</route>
</param>
</action
</block>
In the CMS directive you cannot use helpers, so there you would need to put the actual URL:
{{block type="stack_form/form" template="path/to/your/form.phtml" form_action="/feedback/index/post"}}
Since you probably have different CMS pages/blocks in different store views, this should not be a big problem.