Martin,

Is this change to the intake stuff also apply to the intake in CVS head?  I
want to try and keep the avalonized intake as much up to date as possible so
using it in Scarab (someday!) won't regress any thing..  I expect the
/template and /schedule changes to be redone from the source, so I'm not
worried about them...

Not sure if I am quite reading the cvs thing right.

Eric

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, November 12, 2003 8:37 PM
> To: [EMAIL PROTECTED]
> Subject: cvs commit:
> jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/intake Intake.java
>
>
> mpoeschl    2003/11/12 11:37:08
>
>   Modified:    .        Tag: PRE_AVALON_BRANCH turbine-schema.xml
>                         project.xml project.properties
> maven.xml build.xml
>                src/java/org/apache/fulcrum/schedule Tag:
> PRE_AVALON_BRANCH
>                         JobEntry.java
>                src/java/org/apache/fulcrum/intake/model Tag:
>                         PRE_AVALON_BRANCH IntegerField.java
>                         FieldFactory.java
>                src/java/org/apache/fulcrum/template Tag:
> PRE_AVALON_BRANCH
>                         TemplateEmail.java
>                src/java/org/apache/fulcrum/intake Tag:
> PRE_AVALON_BRANCH
>                         Intake.java
>   Added:       src/java/org/apache/fulcrum/intake/model Tag:
>                         PRE_AVALON_BRANCH LongField.java
>                src/java/org/apache/fulcrum/intake/validator Tag:
>                         PRE_AVALON_BRANCH LongValidator.java
>   Log:
>   sync with version from scarab
>
>   Revision  Changes    Path
>   No                   revision
>   No                   revision
>   1.2.2.1   +2 -2
> jakarta-turbine-fulcrum/Attic/turbine-schema.xml
>
>   Index: turbine-schema.xml
>   ===================================================================
>   RCS file:
> /home/cvs/jakarta-turbine-fulcrum/Attic/turbine-schema.xml,v
>   retrieving revision 1.2
>   retrieving revision 1.2.2.1
>   diff -u -r1.2 -r1.2.2.1
>   --- turbine-schema.xml      13 Nov 2001 05:35:43 -0000      1.2
>   +++ turbine-schema.xml      12 Nov 2003 19:37:07 -0000      1.2.2.1
>   @@ -16,7 +16,7 @@
>    <!-- @version $Id$     -->
>    <!--
> ==============================================================
> ====== -->
>
>   -<database name="@DATABASE_DEFAULT@">
>   +<database name="@DATABASE_DEFAULT@"
> defaultJavaType="@DATABASE_JAVATYPE@">
>
>      <table name="TURBINE_PERMISSION" idMethod="idbroker">
>        <column name="PERMISSION_ID" required="true"
> primaryKey="true" type="INTEGER"/>
>
>
>
>   1.52.2.1  +6 -13     jakarta-turbine-fulcrum/project.xml
>
>   Index: project.xml
>   ===================================================================
>   RCS file: /home/cvs/jakarta-turbine-fulcrum/project.xml,v
>   retrieving revision 1.52
>   retrieving revision 1.52.2.1
>   diff -u -r1.52 -r1.52.2.1
>   --- project.xml     16 Oct 2002 11:51:26 -0000      1.52
>   +++ project.xml     12 Nov 2003 19:37:07 -0000      1.52.2.1
>   @@ -124,7 +124,7 @@
>        </dependency>
>        <dependency>
>          <id>commons-lang</id>
>   -      <version>1.0</version>
>   +      <version>2.0-dev</version>
>          <url>http://jakarta.apache.org/commons/</url>
>        </dependency>
>        <dependency>
>   @@ -159,7 +159,7 @@
>        </dependency>
>        <dependency>
>          <id>junit</id>
>   -      <version>3.8.1</version>
>   +      <version>3.7</version>
>        </dependency>
>        <dependency>
>          <id>log4j</id>
>   @@ -167,7 +167,7 @@
>        </dependency>
>        <dependency>
>          <id>javamail</id>
>   -      <version>1.2</version>
>   +      <version>1.3</version>
>          <url>http://java.sun.com/products/javamail/</url>
>        </dependency>
>        <dependency>
>   @@ -186,7 +186,7 @@
>        </dependency>
>        <dependency>
>          <id>torque</id>
>   -      <version>SNAPSHOT</version>
>   +      <version>3.0</version>
>          <url>http://jakarta.apache.org/turbine/torque/</url>
>        </dependency>
>        <dependency>
>   @@ -210,15 +210,8 @@
>        </dependency>
>        <dependency>
>          <id>xerces</id>
>   -      <type>required</type>
>   -      <version>2.0.2</version>
>   -      <jar>xercesImpl-2.0.2.jar</jar>
>   -      <url>http://xml.apache.org/xerces2-j/index.html</url>
>   -    </dependency>
>   -    <dependency>
>   -      <id>xml-apis</id>
>   -      <type>required</type>
>   -      <version>2.0.2</version>
>   +      <version>1.4.4</version>
>   +      <jar>xerces-1.4.4.jar</jar>
>          <url>http://xml.apache.org/xerces2-j/index.html</url>
>        </dependency>
>        <dependency>
>
>
>
>   1.5.2.1   +5 -3      jakarta-turbine-fulcrum/project.properties
>
>   Index: project.properties
>   ===================================================================
>   RCS file: /home/cvs/jakarta-turbine-fulcrum/project.properties,v
>   retrieving revision 1.5
>   retrieving revision 1.5.2.1
>   diff -u -r1.5 -r1.5.2.1
>   --- project.properties      27 Sep 2002 05:31:24 -0000      1.5
>   +++ project.properties      12 Nov 2003 19:37:07 -0000      1.5.2.1
>   @@ -31,8 +31,9 @@
>    addGetByNameMethod=true
>    complexObjectModel=true
>    addIntakeRetrievable=true
>   +retrievableInterface=org.apache.fulcrum.intake.Retrievable
>    basePrefix=Base
>   -torque.saveException = Exception
>   +saveException = Exception
>
>    schemaDirectory=.
>
>   @@ -50,6 +51,7 @@
>
>    securityPackage=org.apache.fulcrum.security.impl.db.entity
>    schedulerPackage=org.apache.fulcrum.schedule
>   -security.database.name = default
>   -scheduler.database.name = default
>   +security.database.name = scarab
>   +security.database.javatype = object
>   +scheduler.database.name = scarab
>    security.extra.user.columns=
>
>
>
>   1.7.2.1   +1 -0      jakarta-turbine-fulcrum/maven.xml
>
>   Index: maven.xml
>   ===================================================================
>   RCS file: /home/cvs/jakarta-turbine-fulcrum/maven.xml,v
>   retrieving revision 1.7
>   retrieving revision 1.7.2.1
>   diff -u -r1.7 -r1.7.2.1
>   --- maven.xml       11 Oct 2002 03:52:44 -0000      1.7
>   +++ maven.xml       12 Nov 2003 19:37:07 -0000      1.7.2.1
>   @@ -86,6 +86,7 @@
>    </echo>
>
>        <filter token="DATABASE_DEFAULT"
> value="${security.database.name}"/>
>   +    <filter token="DATABASE_JAVATYPE"
> value="${security.database.javatype}"/>
>        <!-- is there a way to load this from an xml file? -->
>        <filter token="EXTRA_USER_COLUMNS"
> value="${security.extra.user.columns}"/>
>        <copy
>
>
>
>   1.57.2.1  +2 -0      jakarta-turbine-fulcrum/build.xml
>
>   Index: build.xml
>   ===================================================================
>   RCS file: /home/cvs/jakarta-turbine-fulcrum/build.xml,v
>   retrieving revision 1.57
>   retrieving revision 1.57.2.1
>   diff -u -r1.57 -r1.57.2.1
>   --- build.xml       1 Aug 2002 16:48:21 -0000       1.57
>   +++ build.xml       12 Nov 2003 19:37:07 -0000      1.57.2.1
>   @@ -176,8 +176,10 @@
>      <target
>        name="security-om"
>        depends="init">
>   +<echo message="asd;lkfja;sldkfjasdlkfja;sdflkja;lskdjf"/>
>
>        <filter token="DATABASE_DEFAULT"
> value="${security.database.name}"/>
>   +    <filter token="DATABASE_JAVATYPE"
> value="${security.database.javatype}"/>
>        <!-- is there a way to load this from an xml file? -->
>        <filter token="EXTRA_USER_COLUMNS"
> value="${security.extra.user.columns}"/>
>        <copy
>
>
>
>   No                   revision
>   No                   revision
>   1.1.1.1.2.1 +2 -4
> jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/schedule/J
> obEntry.java
>
>   Index: JobEntry.java
>   ===================================================================
>   RCS file:
> /home/cvs/jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/
> schedule/JobEntry.java,v
>   retrieving revision 1.1.1.1
>   retrieving revision 1.1.1.1.2.1
>   diff -u -r1.1.1.1 -r1.1.1.1.2.1
>   --- JobEntry.java   30 May 2002 02:27:27 -0000      1.1.1.1
>   +++ JobEntry.java   12 Nov 2003 19:37:07 -0000      1.1.1.1.2.1
>   @@ -155,9 +155,7 @@
>            int result = -1;
>            if (je instanceof JobEntry)
>            {
>   -            result = getJobId().getBigDecimal()
>   -            .compareTo(
>   -                ((JobEntry)je).getJobId().getBigDecimal());
>   +            result = new Integer(getJobId()).compareTo(
> new Integer(((JobEntry)je).getJobId()) );
>            }
>            return result;
>        }
>
>
>
>   No                   revision
>   No                   revision
>   1.2.2.1   +21 -6
> jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/intake/mod
> el/IntegerField.java
>
>   Index: IntegerField.java
>   ===================================================================
>   RCS file:
> /home/cvs/jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/
> intake/model/IntegerField.java,v
>   retrieving revision 1.2
>   retrieving revision 1.2.2.1
>   diff -u -r1.2 -r1.2.2.1
>   --- IntegerField.java       1 Aug 2002 17:04:11 -0000       1.2
>   +++ IntegerField.java       12 Nov 2003 19:37:08 -0000      1.2.2.1
>   @@ -120,15 +120,30 @@
>            if ( isMultiValued  )
>            {
>                String[] ss = pp.getStrings(getKey());
>   -            int[] ival = new int[ss.length];
>   -            for (int i=0; i<ss.length; i++)
>   +            try
>   +            {
>   +                Integer[] values = new Integer[ss.length];
>   +                for (int i=0; i<ss.length; i++)
>   +                {
>   +                    if (ss[i] != null && ss[i].length() > 0)
>   +                    {
>   +                        values[i] = new Integer(ss[i]);
>   +                    }
>   +                }
>   +                setTestValue(values);
>   +            }
>   +            catch (ClassCastException e)
>                {
>   -                if (ss[i] != null && ss[i].length() > 0)
>   +                int[] ival = new int[ss.length];
>   +                for (int i=0; i<ss.length; i++)
>                    {
>   -                    ival[i] = Integer.parseInt(ss[i]);
>   +                    if (ss[i] != null && ss[i].length() > 0)
>   +                    {
>   +                        ival[i] = Integer.parseInt(ss[i]);
>   +                    }
>                    }
>   +                setTestValue(ival);
>                }
>   -            setTestValue(ival);
>            }
>            else
>            {
>
>
>
>   1.1.1.1.2.1 +10 -1
> jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/intake/mod
> el/FieldFactory.java
>
>   Index: FieldFactory.java
>   ===================================================================
>   RCS file:
> /home/cvs/jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/
> intake/model/FieldFactory.java,v
>   retrieving revision 1.1.1.1
>   retrieving revision 1.1.1.1.2.1
>   diff -u -r1.1.1.1 -r1.1.1.1.2.1
>   --- FieldFactory.java       30 May 2002 02:27:18 -0000      1.1.1.1
>   +++ FieldFactory.java       12 Nov 2003 19:37:08 -0000
> 1.1.1.1.2.1
>   @@ -100,6 +100,15 @@
>                    }
>                }
>                           );
>   +        fieldCtors.put("long", new FieldFactory.FieldCtor()
>   +            {
>   +                public Field getInstance(XmlField f, Group g)
>   +                    throws Exception
>   +                {
>   +                    return new LongField(f, g);
>   +                }
>   +            }
>   +                       );
>            fieldCtors.put("BigDecimal", new FieldFactory.FieldCtor()
>                {
>                    public Field getInstance(XmlField f, Group g)
>
>
>
>   No                   revision
>
>   Index: FieldFactory.java
>   ===================================================================
>   RCS file:
> /home/cvs/jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/
> intake/model/FieldFactory.java,v
>   retrieving revision 1.1.1.1
>   retrieving revision 1.1.1.1.2.1
>   diff -u -r1.1.1.1 -r1.1.1.1.2.1
>   --- FieldFactory.java       30 May 2002 02:27:18 -0000      1.1.1.1
>   +++ FieldFactory.java       12 Nov 2003 19:37:08 -0000
> 1.1.1.1.2.1
>   @@ -100,6 +100,15 @@
>                    }
>                }
>                           );
>   +        fieldCtors.put("long", new FieldFactory.FieldCtor()
>   +            {
>   +                public Field getInstance(XmlField f, Group g)
>   +                    throws Exception
>   +                {
>   +                    return new LongField(f, g);
>   +                }
>   +            }
>   +                       );
>            fieldCtors.put("BigDecimal", new FieldFactory.FieldCtor()
>                {
>                    public Field getInstance(XmlField f, Group g)
>
>
>
>   No                   revision
>
>   Index: FieldFactory.java
>   ===================================================================
>   RCS file:
> /home/cvs/jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/
> intake/model/FieldFactory.java,v
>   retrieving revision 1.1.1.1
>   retrieving revision 1.1.1.1.2.1
>   diff -u -r1.1.1.1 -r1.1.1.1.2.1
>   --- FieldFactory.java       30 May 2002 02:27:18 -0000      1.1.1.1
>   +++ FieldFactory.java       12 Nov 2003 19:37:08 -0000
> 1.1.1.1.2.1
>   @@ -100,6 +100,15 @@
>                    }
>                }
>                           );
>   +        fieldCtors.put("long", new FieldFactory.FieldCtor()
>   +            {
>   +                public Field getInstance(XmlField f, Group g)
>   +                    throws Exception
>   +                {
>   +                    return new LongField(f, g);
>   +                }
>   +            }
>   +                       );
>            fieldCtors.put("BigDecimal", new FieldFactory.FieldCtor()
>                {
>                    public Field getInstance(XmlField f, Group g)
>
>
>
>   1.1.2.1   +161 -0
> jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/intake/mod
> el/Attic/LongField.java
>
>
>
>
>   No                   revision
>   No                   revision
>   1.1.2.1   +199 -0
> jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/intake/val
> idator/Attic/LongValidator.java
>
>
>
>
>   No                   revision
>   No                   revision
>   1.4.2.1   +110 -47
> jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/template/T
> emplateEmail.java
>
>   Index: TemplateEmail.java
>   ===================================================================
>   RCS file:
> /home/cvs/jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/
> template/TemplateEmail.java,v
>   retrieving revision 1.4
>   retrieving revision 1.4.2.1
>   diff -u -r1.4 -r1.4.2.1
>   --- TemplateEmail.java      17 Sep 2002 22:44:10 -0000      1.4
>   +++ TemplateEmail.java      12 Nov 2003 19:37:08 -0000      1.4.2.1
>   @@ -61,7 +61,8 @@
>    import javax.mail.internet.InternetAddress;
>    import org.apache.commons.mail.SimpleEmail;
>    import org.apache.commons.lang.StringUtils;
>   -import org.apache.commons.util.WordWrapper;
>   +import org.apache.commons.lang.WordWrapUtils;
>   +import org.apache.fulcrum.ServiceException;
>
>    /**
>     * This is a simple class for sending email from within
> the TemplateService.
>   @@ -164,6 +165,8 @@
>        /** The cc list. */
>        private List replyToList = null;
>
>   +    private List headersList;
>   +
>        /** The column to word-wrap at.  <code>0</code>
> indicates no wrap. */
>        private int wordWrap = 0;
>
>   @@ -199,6 +202,76 @@
>            this.context = context;
>        }
>
>   +    public String getCharSet()
>   +    {
>   +        return charset;
>   +    }
>   +
>   +    public String getTemplate()
>   +    {
>   +        return template;
>   +    }
>   +
>   +    public int getWordWrap()
>   +    {
>   +        return wordWrap;
>   +    }
>   +
>   +    public List getToList()
>   +    {
>   +        return toList == null ? toList = new ArrayList() : toList;
>   +    }
>   +
>   +    public void setToList(List v)
>   +    {
>   +        toList = v;
>   +    }
>   +
>   +    public List getCCList()
>   +    {
>   +        return ccList == null ? ccList = new ArrayList() : ccList;
>   +    }
>   +
>   +    public List getReplyToList()
>   +    {
>   +        return replyToList == null ? replyToList = new
> ArrayList(3) : replyToList;
>   +    }
>   +
>   +    public List getHeadersList()
>   +    {
>   +        return headersList == null ? headersList = new
> ArrayList(3) : headersList;
>   +    }
>   +
>   +    public String getToName()
>   +    {
>   +        return toName;
>   +    }
>   +
>   +    public String getToEmail()
>   +    {
>   +        return toEmail;
>   +    }
>   +
>   +    public String getFromName()
>   +    {
>   +        return fromName;
>   +    }
>   +
>   +    public String getFromEmail()
>   +    {
>   +        return fromEmail;
>   +    }
>   +
>   +    public String getCCName()
>   +    {
>   +        return ccName;
>   +    }
>   +
>   +    public String getCCEmail()
>   +    {
>   +        return ccEmail;
>   +    }
>   +
>        /** Add a recipient TO to the email.
>         *
>         * @param email A String.
>   @@ -214,12 +287,7 @@
>                    name = email;
>                }
>
>   -            if (toList == null)
>   -            {
>   -                toList = new ArrayList();
>   -            }
>   -
>   -            toList.add(new InternetAddress(email, name));
>   +            getToList().add(new InternetAddress(email, name));
>            }
>            catch (Exception e)
>            {
>   @@ -243,12 +311,7 @@
>                    name = email;
>                }
>
>   -            if (ccList == null)
>   -            {
>   -                ccList = new ArrayList();
>   -            }
>   -
>   -            ccList.add(new InternetAddress(email, name));
>   +            getCCList().add(new InternetAddress(email, name));
>            }
>            catch (Exception e)
>            {
>   @@ -327,28 +390,24 @@
>            String[] emailName = new String[2];
>            emailName[0] = email;
>            emailName[1] = name;
>   -        if (replyToList == null)
>   -        {
>   -            replyToList = new ArrayList(3);
>   -        }
>   -        replyToList.add(emailName);
>   +        getReplyToList().add(emailName);
>            return this;
>        }
>
>   -    private List headersList;
>        public TemplateEmail addHeader(String name, String value)
>        {
>            String[] pair = new String[2];
>            pair[0] = name;
>            pair[1] = value;
>   -        if (headersList == null)
>   -        {
>   -            headersList = new ArrayList(3);
>   -        }
>   -        headersList.add(pair);
>   +        getHeadersList().add(pair);
>            return this;
>        }
>
>   +    public String getSubject()
>   +    {
>   +        return this.subject;
>   +    }
>   +
>        /**
>         * Subject.
>         *
>   @@ -429,61 +488,66 @@
>        public void send()
>            throws Exception
>        {
>   -        if (toEmail == null || toName == null)
>   +        if (getToEmail() == null || getToName() == null)
>            {
>                throw new Exception ("Must set a To:");
>            }
>
>            // this method is only supposed to send to one
> user (additional cc:
>            // users are ok.)
>   -        toList = null;
>   +        setToList(null);
>            addTo(toEmail, toName);
>            sendMultiple();
>        }
>
>   +    protected String handleRequest()
>   +        throws ServiceException
>   +    {
>   +        StringWriter sw = new StringWriter();
>   +
> TurbineTemplate.handleRequest(getContext(),getTemplate(),sw);
>   +        return sw.toString();
>   +    }
>   +
>        /**
>         * This method sends the email to multiple addresses.
>         */
>        public void sendMultiple()
>            throws Exception
>        {
>   -        if (toList == null || toList.isEmpty())
>   +        if (getToList() == null || getToList().isEmpty())
>            {
>                throw new Exception ("Must set a To:");
>            }
>
>            // Process the template.
>   -        StringWriter sw = new StringWriter();
>   -        TurbineTemplate.handleRequest(context,template, sw);
>   -        String body = sw.toString();
>   +        String body = handleRequest();
>
>            // If the caller desires word-wrapping, do it here
>   -        if (wordWrap > 0)
>   +        if (getWordWrap() > 0)
>            {
>   -            body = WordWrapper.wrapText (body,
>   +            body = WordWrapUtils.wrapText (body,
>
> System.getProperty("line.separator"),
>   -                                     wordWrap);
>   +                                     getWordWrap());
>            }
>
>            SimpleEmail se = new SimpleEmail();
>   -        se.setFrom(fromEmail, fromName);
>   -        se.setTo(toList);
>   -        if (ccList != null && !ccList.isEmpty())
>   +        se.setFrom(getFromEmail(), getFromName());
>   +        se.setTo(getToList());
>   +        if (getCCList() != null && !getCCList().isEmpty())
>            {
>   -            se.setCc(ccList);
>   +            se.setCc(getCCList());
>            }
>            addReplyTo(se);
>   -        if (charset != null)
>   +        if (getCharSet() != null)
>            {
>   -            se.setCharset(charset);
>   +            se.setCharset(getCharSet());
>            }
>   -        se.setSubject(subject);
>   +        se.setSubject(getSubject());
>            se.setMsg(body);
>
>   -        if (headersList != null)
>   +        if (getHeadersList() != null)
>            {
>   -            Iterator i = headersList.iterator();
>   -            while (i.hasNext())
>   +            for (Iterator i =
> getHeadersList().iterator();i.hasNext();)
>                {
>                    String[] pair = (String[])i.next();
>                    se.addHeader(pair[0], pair[1]);
>   @@ -502,10 +566,9 @@
>        private void addReplyTo(SimpleEmail se)
>            throws Exception
>        {
>   -        if (replyToList != null)
>   +        if (getReplyToList() != null)
>            {
>   -            Iterator i = replyToList.iterator();
>   -            while (i.hasNext())
>   +            for (Iterator i =
> getReplyToList().iterator();i.hasNext();)
>                {
>                    String[] emailName = (String[])i.next();
>                    se.addReplyTo(emailName[0], emailName[1]);
>
>
>
>   No                   revision
>   No                   revision
>   1.1.1.1.2.1 +3 -3
> jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/intake/Intake.java
>
>   Index: Intake.java
>   ===================================================================
>   RCS file:
> /home/cvs/jakarta-turbine-fulcrum/src/java/org/apache/fulcrum/
> intake/Intake.java,v
>   retrieving revision 1.1.1.1
>   retrieving revision 1.1.1.1.2.1
>   diff -u -r1.1.1.1 -r1.1.1.1.2.1
>   --- Intake.java     30 May 2002 02:27:17 -0000      1.1.1.1
>   +++ Intake.java     12 Nov 2003 19:37:08 -0000      1.1.1.1.2.1
>   @@ -145,7 +145,7 @@
>                }
>                catch(Exception e)
>                {
>   -                category.error(e);
>   +                category.error("", e);
>                }
>            }
>        }
>   @@ -291,7 +291,7 @@
>                }
>                catch(Exception e)
>                {
>   -                category.error(e);
>   +                category.error("", e);
>                }
>
>                return null;
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to